2014-02-19 59 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

相關問題