C# Java中正则表达式替换的自定义函数
我需要通过应用特定的替换方法来替换文本中的所有单词C# Java中正则表达式替换的自定义函数,c#,java,regex,replace,matchevaluator,C#,Java,Regex,Replace,Matchevaluator,我需要通过应用特定的替换方法来替换文本中的所有单词Modify()。我用C#编写了以下代码片段: Modify()函数是用来修改每个匹配项的函数,例如,它可以用下一个字母字符替换单词中的所有字符。例如,如果这是输入文本: 神奇的香蕉正在吃苹果 这可能是输出: Nbhjd cbobob jt fbujoh uif bqqmf Modify()函数的用途与此无关。我想知道的Java实现的。代码在C#中相当简单,但在Java中如何实现这一点呢?下面的内容如何: public static void m
Modify()
。我用C#编写了以下代码片段:
Modify()
函数是用来修改每个匹配项的函数,例如,它可以用下一个字母字符替换单词中的所有字符。例如,如果这是输入文本:
神奇的香蕉正在吃苹果
这可能是输出:
Nbhjd cbobob jt fbujoh uif bqqmf
Modify()函数的用途与此无关。我想知道的Java实现的。代码在C#中相当简单,但在Java中如何实现这一点呢?下面的内容如何:
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();
}
沿着这条思路做点什么怎么样:
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();
}
x
在这里指的是什么?它与单词匹配。lambda表达式实际上是一个匹配计算器()。您可以使用类似于public static String modify(String text){return text.replaceAll(“[a-Za-z][a-z]*”,”);}
@Igor Sevo-对1)
的假设不正确。在全局替换中,[a-Za-z][a-z]*
将匹配所有大写字母,无论它们位于何处,开头/中间/结尾!小写字母也一样。例如,它匹配ABCDE
,在5个连续匹配中每个匹配1个大写。@Igor Sevo-它仍然不正确,实际上是相同的。事实上,它只是[A-Za-z]
,在全局替换中,将匹配每个大写/小写字母。唯一的方法是使用单词boundry:\b[a-Za-z][a-z]*
这里的x
指的是什么?它是单词的匹配项。lambda表达式实际上是一个匹配计算器()。您可以使用类似于public static String modify(String text){return text.replaceAll(“[a-Za-z][a-z]*”,”);}
@Igor Sevo-对1)
的假设不正确。在全局替换中,[a-Za-z][a-z]*
将匹配所有大写字母,无论它们位于何处,开头/中间/结尾!小写字母也一样。例如,它匹配ABCDE
,在5个连续匹配中每个匹配1个大写。@Igor Sevo-它仍然不正确,实际上是相同的。事实上,它只是[A-Za-z]
,在全局替换中,将匹配每个大写/小写字母。唯一的方法是使用boundry一词:\b[a-Za-z][a-z]*
非常感谢。很有效,非常感谢。它起作用了。
Old text: Magic banana is eating the apple.
New text: Nbhjd cbobob jt fbujoh uif bqqmf.