2014-02-19 32 views
2

我有一个像这样的字符串"4 + 5 = 9;",我想为找到的每个号码添加一个。在Java 8中,Regex-replace-with-function-evaluation等价于什么?

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

我知道如何在Java中执行它< = 7.它在javadocthis 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 
+2

看起来不像有在Java 8文档(http://download.java.net/jdk8/docs/api/java什么新的东西/util/regex/Matcher.html)。 – arshajii

+0

看起来不错,认为它是正确的做法。 – aepurniet

回答

0

您可以使用内置的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; 
+0

该方法仅适用于没有上下文的1个char(或分隔)字符串。尝试与'a + 1 = 6'相同。 – aalku

+0

不明白你的意思,但是'a + 1 = 6'的结果是'a + 2 = 7'。 –

+0

对不起,'a + 10 = 15' – aalku

相关问题