我需要解析一个公式并获取所有使用的变量。变量列表可用。例如,公式如下所示:
String f = "(Min(trees, round(Apples1+Pears1,1)==1&&universe==big)*number";
我知道可能的变量是:
String[] vars = {"trees","rivers","Apples1","Pears1","Apricots2","universe","galaxy","big","number"};
我需要获得以下数组:
String[] varsInF = {"trees", "Apples1","Pears1", "universe", "big","number"};
我认为分裂方法在这里很好,但无法确定这需要的正则表达式。
答案 0 :(得分:1)
不需要任何正则表达式模式 - 只需检查给定字符串中包含哪个受支持的vars
项:
List<String> varsInf = new ArrayList<>();
for(String var : vars)
if(f.contains(var))
varsInf.add(var);
使用Stream<>
您可以:
String[] varsInf = Arrays.stream(vars).filter(f::contains).toArray(String[]::new);
答案 1 :(得分:0)
假设“变量”由一个字母数字字符或多个此类字符的连续序列表示,则应按非字母数字字符分割,即。即[^\w]+
,然后通过迭代或过滤器收集结果:
Set<String> varSet = new HashSet<>(Arrays.asList(vars));
List<String> result = new ArrayList<>();
for (String s : f.split("[^\\w]+")) {
if (varSet.contains(s)) {
result.add(s);
}
}