我正在尝试解析一个表达式以找出一些保留的运算符/字符串并将它们替换为存储在哈希图中的相应数值,并显示具有数值而不是保留字符串的结果表达式。这就是我想要做的:
String expression = "SUM_ALL(4:5,5:6)>MAX(6:7)";
Map<String, Double> functionOperators = new HashMap<String,Double>();
functionOperators.put("SUM_ALL(4:5,5:6)", 4.0);
functionOperators.put("MAX(6:7)",5.0);
expression = expression.replaceAll("(SUM_ALL|MAX)\\s*\\(\\s*([\\d:,]+)\\s*\\)",
Double.toString(functionOperators.get(String.format("%s(%s)","$1","$2"))));
System.out.println(expression);
"$1" 和 "$2" 用于反向引用表达式中的组。
这是相同的输出:
Exception in thread "main" java.lang.NullPointerException
而当我删除获取部分(从哈希图中)并使用反向引用组将其限制为仅更改字符串时,它工作得很好。
expression = expression.replaceAll("(SUM_ALL|MAX)\\s*\\(\\s*([\\d:,]+)\\s*\\)",
String.format("%s|%s|","$1","$2"));
输出:
SUM_ALL|4:5,5:6|>MAX|6:7|
我怀疑在从哈希图中获取值时,“$1”和“$2”变量仍未通过反向引用解决,因此,它无法找到对应的键。
如果这是真的,那么你建议用什么方法来实现我需要预定义哈希图中的替换值的用例。