通过子串的模式解析字符串

时间:2017-07-08 18:59:48

标签: java

我需要解析一个公式并获取所有使用的变量。变量列表可用。例如,公式如下所示:

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"};

我认为分裂方法在这里很好,但无法确定这需要的正则表达式。

2 个答案:

答案 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);
    }
}