【发布时间】:2017-09-28 22:08:40
【问题描述】:
我正在编写一段代码,我必须将一个字符串拆分成单独的部分并替换它们。 我的代码的基本逻辑流程是,有一个包含公式的字符串。 LHS 下面的数字,即 1、2 和 3 是不同对象的 id。拆分它们后,我将使用这些 id,获取相应的值并将下面字符串中的 id 替换为其各自的值。我拥有的字符串如下 -
String str = "(1+2+3)>100";
我使用以下代码来拆分字符串 -
String[] arraySplit = str.split("\\>|\\<|\\=");
String[] finalArray = arraySplit[0].split("\\(|\\)|\\+|\\-|\\*");
arraySplit[0] = arraySplit[0].replace(id,reading);
因此,在拆分字符串后,我将用值替换字符串,即字符串现在是 (30+45+50)>100,其中 30、45 和 50 是各自的值。 (这个字符串随后将在 SpEL 中用于计算公式)
在用值替换字符串时,我得到以下响应 -
初始字符串-
(1+2+3)>100 其中 1、2 和 3 是 ID。 id 的值分别为 30.0、45.0 和 50.0。
使用for循环替换值后,字符串为-
(50.00.0+45.0+50.0)>100。第一个值很奇怪。原因是在第三次迭代中,字符串看起来像这样 - (30.0+45.0+3)>100。因此,在第三次迭代中替换字符串时,它将 3 的所有实例替换为 50.0,从而产生上述字符串。所以显然在这里使用String.replace() 不会是一个更好的选择。那么在这种情况下我应该使用什么方法呢?我也在使用 SpEL,所以如果使用 SpEL 有更好的解决方案,那么它也很好。
这里,(1+2+3)>100 只是一个例子。圆括号是公式的一部分,字符串也可以是((1+2+3)*(5-2))>100。甚至可以更改公式的语法,目前公式是这样的 - (1+2+3) * 4>100 但如果有办法通过稍微更改公式语法然后这也会有帮助,例如将公式替换为 - ({#1}+{#2}+{#3}) *
{#4}>100,在这种情况下,我将使用 {# 作为变量获取变量并获取数字。
我希望这部分很清楚。
【问题讨论】:
-
一种方法是先用字母替换 ids(例如:A 代表 1,B 代表 2)然后分两步替换而不是一步替换
标签: java string replace spring-el