替换java中的字符串占位符值(条件适用)
我的问题可能有点奇怪。我在字符串中有以下条件替换java中的字符串占位符值(条件适用),java,spring,Java,Spring,我的问题可能有点奇怪。我在字符串中有以下条件 String condition="((1 || 3) && 4)"; ***//I am fine to add special characters in this condition as well..*** 在我的代码中,我需要通过将数值替换为ArrayList.get来动态计算表达式,如下所示: boolean result=(someArrayList.get(1).isResult() || someArrayList
String condition="((1 || 3) && 4)"; ***//I am fine to add special characters in this condition as well..***
在我的代码中,我需要通过将数值替换为ArrayList.get
来动态计算表达式,如下所示:
boolean result=(someArrayList.get(1).isResult() || someArrayList.get(3).isResult()) && someArrayList.get(4).isResult();
我的问题是,如何用
someArrayList.get(1)
轻松替换上述条件下的数字(1,3,4)。。。我可以编写逻辑来完成这项工作,但我会尝试看看是否有任何易于使用的API。您可以按如下方式完成:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String condition = "((1 || 3) && 4)";
StringBuilder sb = new StringBuilder(condition);
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(condition);
int index, fromIndex = 0, upTo;
while (m.find()) {
String num = m.group();
index = sb.indexOf(num, fromIndex);
upTo = index + num.length();
sb.replace(index, upTo, "someArrayList.get(" + num + ").isResult()");
fromIndex = upTo;
}
System.out.println(sb);
}
}
输出:
((someArrayList.get(1).isResult() || someArrayList.get(3).isResult()) && someArrayList.get(4).isResult())
您可以按如下方式进行操作:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String condition = "((1 || 3) && 4)";
StringBuilder sb = new StringBuilder(condition);
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(condition);
int index, fromIndex = 0, upTo;
while (m.find()) {
String num = m.group();
index = sb.indexOf(num, fromIndex);
upTo = index + num.length();
sb.replace(index, upTo, "someArrayList.get(" + num + ").isResult()");
fromIndex = upTo;
}
System.out.println(sb);
}
}
输出:
((someArrayList.get(1).isResult() || someArrayList.get(3).isResult()) && someArrayList.get(4).isResult())
只需使用
replaceAll
:
String condition="((1 || 3) && 4)";
String newCondition = condition.replaceAll("(\\d+)", "someArrayList.get($1).isResult()");
只需使用
replaceAll
:
String condition="((1 || 3) && 4)";
String newCondition = condition.replaceAll("(\\d+)", "someArrayList.get($1).isResult()");
你想编辑什么?变量
条件
或结果
?你能举例说明你想做什么吗?thanks@MahmoudHendi当然,我想这样替换条件值,它应该是动态条件。替换(“1”,“someArrayList.get(1).isResult()”)您想编辑什么?变量条件
或结果
?你能举例说明你想做什么吗?thanks@MahmoudHendi当然,我想像这样替换条件值,它应该是动态条件。替换(“1”,“someArrayList.get(1).isResult()”)谢谢分享。但是,正如我在问题中提到的,我正在寻找一些可用的API来实现这个逻辑。谢谢分享。但是,正如我在问题中提到的,我正在寻找一些可用的API来实现这个逻辑。我如何将其作为表达式进行计算?当我尝试下面的代码时,它抛出错误字符串condition=“((1 | | 3)和&4)”;字符串newCondition=condition.replaceAll(“(\\d+”),“list.get($1).isResult()”;ExpressionParser=new SpelExpressionParser();布尔结果=(布尔)parser.parseExpression(newCondition.getValue();如何将其计算为表达式?当我尝试下面的代码时,它抛出错误字符串condition=“((1 | | 3)和&4)”;字符串newCondition=condition.replaceAll(“(\\d+”),“list.get($1).isResult()”;ExpressionParser=new SpelExpressionParser();布尔结果=(布尔)parser.parseExpression(newCondition.getValue();