0

我有一个这样的字符串:"#{var1} is like #{var2}
我想用变量和的值替换"#{var1}and 。有没有一种聪明的方法可以做到这一点,而无需遍历整个字符串并找到模式然后替换它? 我找不到可以做到这一点的图书馆。"#{var1}var1var1#{}

4

3 回答 3

3

您可以使用 java 内置正则表达式机制在检查的字符串中查找模式并使用适当的函数进行替换。我来给你展示...

 public static void main(String[] args)
    {
      StringBuilder output = new StringBuilder();
      String inputString = "sequence to analize #{var1} is like #{var2}";
      Pattern pattern = Pattern.compile("#\\{(.*?)\\}");
      Matcher matcher = pattern.matcher(inputString);
      int lastStart = 0;
      while (matcher.find()) {
        String subString = inputString.substring(lastStart,matcher.start());
        String varName = matcher.group(1);
        String replacement = getVarValue (varName);
        output.append(subString).append(replacement);
        lastStart = matcher.end();
      }
      System.out.println(output.toString());
    }

    private static String getVarValue(String varName) {
       return "value"; // do what you got to replace the variable name for its value
    }

也许这个例子需要更多的工作......但它可以给你一个想法。

希望能帮助到你。

问候。

于 2015-09-18T16:18:50.650 回答
2

你可以做这样的事情。使用String.format. 它不是很漂亮,但很有效。它不使用变量名,但仍然非常有用。

String string = String.format("A String %s %2d", aStringVar, anIntVar);

这里还有一些例子

希望这可以帮助。

于 2015-09-18T16:21:11.177 回答
1

实现这一点的最简单方法可能是使用String.format. 它在内部使用Formatter该类。

这种方法具有您不需要任何第三方库String.format的优点(Java 1.5 引入)。

这里有一个完整的例子:

import static java.lang.String.format;

public class Interpolate {
    public static void main(String[] args) {
        String var1 = "foo";
        String var2 = "bar";
        String s = format("%1$s is like %2$s is like %1$s",var1, var2);
        System.out.println(s); // "foo is like bar is like foo"
    }
}

注意%1$s或中的数字%2$s。它们指的是参数在格式调用中的位置。这允许您多次使用变量,并且您可以自由地重新排列变量的顺序(在格式字符串内)。

有关格式字符串的更多信息,请参阅Formatter文档。

于 2015-09-18T16:32:24.127 回答