【问题标题】:What is the equivalent of Regex-replace-with-function-evaluation in Java 8?Java 8 中 Regex-replace-with-function-evaluation 的等价物是什么?
【发布时间】:2014-03-20 00:32:01
【问题描述】:

我有一个像 "4 + 5 = 9;" 这样的字符串,我想在找到的每个数字上加一个。

我想对每个匹配项使用正则表达式和转换函数。

我知道如何在 Java javadoc 和 this answer 中。

我想知道 Java 8 中是否有这方面的新内容。

编辑: 这是我最好的尝试:

private static String regexTransform(String regex, String input,
        Function<String, String> function) {
    Matcher m = Pattern.compile(regex).matcher(input);
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
       m.appendReplacement(sb, function.apply(m.group()));
    }
    m.appendTail(sb);
    return sb.toString();
}

String res = regexTransform("[0-9]+", "4 + 5 = 9;", s-> String.valueOf(Long.parseLong(s) + 1));
System.out.println(res); // 5 + 6 = 10

【问题讨论】:

  • Java 8 docs 在这方面似乎没有任何新内容。
  • 看起来不错,认为这是正确的方法。

标签: java regex replace transformation java-8


【解决方案1】:

您可以使用内置的stream-api 来实现这一点。

我们可以做到以下几点:

String input = "4 + 5 = 9;";

String out = input.chars()
        .mapToObj(i -> String.valueOf((char) i))
        .map(s -> s.matches("[0-9]") ? String.valueOf((Integer.parseInt(s) + 1)) : s)
        .collect(Collectors.joining());

System.out.println(out);    // prints 5 + 6 = 10;

【讨论】:

  • 该方法仅适用于没有上下文的 1 个字符(或分隔)字符串。尝试使用 a+1= 6 进行相同操作。
  • 无法理解你的意思,但是a+1= 6的结果是a+2= 7
猜你喜欢
  • 2020-03-31
  • 2023-03-04
  • 2016-07-26
  • 2021-10-23
  • 1970-01-01
  • 2019-11-11
  • 2021-10-18
  • 2010-12-07
  • 2013-03-12
相关资源
最近更新 更多