2013-12-22 2 views
1

Мне нужно заменить все слова в тексте, применив метод замещения Modify(). У меня есть следующий фрагмент кода в C#:Пользовательская функция замены Regex в Java

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

Modify() функция некоторая функция, которая выполняется для изменения каждый матч, например, он может заменить все символы в слове со следующей буквы алфавита. Например, если это текст ввода:

Magic banana ест яблоко.

Это может быть выход:

Nbhjd cbobob JT fbujoh ПИФ bqqmf.

Назначение функции Modify() здесь не имеет значения. Мне интересно о реализации Java MatchEvaluator. Код довольно прост в C#, но как это будет достигнуто в Java?

+1

Что 'x' ссылку на здесь? – hwnd

+1

Это матч за слово. Выражение лямбда на самом деле является оценщиком совпадений (http://msdn.microsoft.com/en-us/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

Большое спасибо. Оно работает. –

Смежные вопросы