【问题标题】:Parse text with dynamic variables in java在java中使用动态变量解析文本
【发布时间】:2012-07-01 15:56:26
【问题描述】:

我需要解析文本,并将变量放入其中。类似的东西:

lorem ${var} dolor sit amet consectetur adipiscing elit

结束String var = "ipsum" insted of ${var}

最简单的方法是什么?我将使用正则表达式和匹配器。但可能是spring(或其他东西)已经有了这个功能?

【问题讨论】:

标签: java parsing variables text dynamic-variables


【解决方案1】:

Java 标准类MessageFormat 与您想要的比较接近,但它不处理任意占位符名称。如果需要,最好的选择确实是正则表达式。如果您不认为它们很快,我建议您在拒绝它们之前进行测量。这是一个大纲:

final Map<String, String> vars = new HashMap<String, String>();
vars.put("var", "ipsum");
final String s = "lorem ${var} dolor sit amet consectetur adipiscing elit";
final Matcher m = Pattern.compile("\\$\\{(.*?)\\}").matcher(s);
final StringBuffer b = new StringBuffer(s.length());
while (m.find()) m.appendReplacement(b, vars.get(m.group(1)));
m.appendTail(b);
System.out.println(b);

【讨论】:

  • 这种方式其实挺快的。
  • @Soronthar 一个缺陷是Matcher 强制使用同步的StringBuffer
【解决方案2】:

String 有一个用于正则表达式的内置包装器:String replaceAll(String regex, String replacement)

尝试:

 String result = "lorem ${var} dolor sit amet consectetur adipiscing elit".replaceAll("\\$\\{var\\}", "ipsum");

【讨论】:

  • 谢谢。但是速度呢,因为文本可能相当大。
  • @user1406196 好吧,您想要最简单的方法还是执行良好的方法?
  • 我需要一个天平。你知道,当你使用著名的库时,比如 apache commons,你可以肯定在这些事情上。
  • commons 在StringUtils 中有一个替换方法。它遍历输入,并使用String 方法(如indexOfsubstring)进行搜索。
猜你喜欢
  • 2018-05-03
  • 1970-01-01
  • 2020-11-27
  • 2019-02-27
  • 2016-03-19
  • 2012-08-31
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
相关资源
最近更新 更多