用 java 中的特定字符串列表替换字符串

Replace a String with specific list of strings in java

这里是例子,

public class Demo{

    public static void main (String args[]) {

        List<String> varList = Arrays.asList("VAR_TEMP", "VAR_TEMPA", "VAR_TEMPB");
        String operation = "var temp = VAR_TEMPB";

        for (String var : varList) {
            operation = (operation.contains(var))
                    ? operation.replace(var, "'HI'")
                            : operation;
        }

        System.out.println("Final operation : " + operation);
    }
}

我正在尝试用字符串列表替换操作字符串。

我期待以上代码的响应,

Final operation : var temp = HI

但它给出了如下响应,

Final operation : var temp = 'HI'B

在迭代字符串列表时,它采用第一个匹配项("VAR_TEMP"),而不是采用完全匹配项("VAR_TEMPB")。 您能否建议实现此预期响应的方法。

列表声明为 List<String> varList = Arrays.asList("VAR_TEMP", "VAR_TEMPA", "VAR_TEMPB");

操作是String operation = "var temp = VAR_TEMPB";

循环的作用如下:

  1. 操作(var temp = VAR_TEMPB)是否包含VAR_TEMP?是
  2. 现在的操作是 var temp = 'HI'B
  3. 操作 (var temp = 'HI'B) 是否包含 VAR_TEMPA? No.操作不变
  4. 操作 (var temp = 'HI'B) 是否包含 VAR_TEMPB? No.操作不变

当您表达精确匹配模式时,一个简单的解决方案应该是使用正则表达式。例如:

class Scratch {
  public static void main(String[] args) {
    final List<Pattern> varList =
        Arrays.asList(
            Pattern.compile("(VAR_TEMP)$"),
            Pattern.compile("(VAR_TEMPA)$"),
            Pattern.compile("(VAR_TEMPB)$"));

    String operation = "var temp = VAR_TEMPB";

    Matcher tmp;
    for (Pattern item : varList) {
      tmp = item.matcher(operation);
      operation = tmp.find() ? operation.replace(tmp.group(), "'HI'") : operation;
    }

    System.out.println("Final operation : " + operation);
  }
}