2013-12-22 39 views
1

我需要通過應用特定替換方法Modify()來替換文本中的所有單詞。我在C#下面的代碼片段:用Java替換正則表達式的自定義函數

Regex regex = new Regex("[A-Za-z][a-z]*"); 
regex.Replace(text, x => Modify(x.Value)); 

Modify()功能是執行修改每場比賽的一些功能,例如它可以替換爲一個字母字符單詞的所有字符。例如,如果這是輸入文字:

魔法香蕉正在吃蘋果。

這可能是輸出:

Nbhjd cbobob JT fbujoh UIF bqqmf。

Modify()函數的用途在這裏是無關緊要的。我想知道MatchEvaluator的Java實現。該代碼在C#中非常簡單,但在Java中如何實現?

+1

什麼'x'參考這裏? – hwnd

+1

這是匹配的單詞。 lambda表達式實際上是Match Evaluator(http://msdn.microsoft.com/zh-cn/library/system.text.regularexpressions.matchevaluator(v = vs.110).aspx)。 –

+1

你可以使用像'public static String modify(String text){return text.replaceAll(「[A-Za-z] [a-z] *」,「」);}' – iNan

回答

6

如何沿着這條路線的東西:

public static void main(String[] args) { 
    String text = "Magic banana is eating the apple."; 
    System.out.println("Old text: " + text); 
    System.out.println("New text: " + getEditedText(text)); 
} 

private static String getEditedText(String text) { 
    StringBuffer result = new StringBuffer(); 
    Pattern pattern = Pattern.compile("[A-Za-z][a-z]*"); 
    Matcher matcher = pattern.matcher(text); 
    while (matcher.find()) { 
     matcher.appendReplacement(result, getReplacement(matcher)); 
    } 
    matcher.appendTail(result); 
    return result.toString(); 
} 

private static String getReplacement(Matcher matcher) { 
    String word = matcher.group(0); 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < word.length(); i++) { 
     char c = word.charAt(i); 
     sb.append((char)(c + 1)); 
    } 
    return sb.toString(); 
} 

這是一個可以在this page底部找到的代碼稍微修改的例子。

這是輸出,你會得到:

Old text: Magic banana is eating the apple. 
New text: Nbhjd cbobob jt fbujoh uif bqqmf. 
+0

非常感謝。有用。 –