替换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();