Java中Regex替换的自定义函数[关闭]
Posted
技术标签:
【中文标题】Java中Regex替换的自定义函数[关闭]【英文标题】:Custom function on Regex replace in Java [closed] 【发布时间】:2014-01-11 00:55:34 【问题描述】:我需要通过应用特定的替换方法Modify()
来替换文本中的所有单词。我在 C# 中有以下代码 sn-p:
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 中如何实现呢?
【问题讨论】:
x
在这里指的是什么?
是单词的匹配。 lambda 表达式实际上是一个匹配评估器 (msdn.microsoft.com/en-us/library/…)。
你可以使用类似public static String modify(String text)return text.replaceAll("[A-Za-z][a-z]*", "");
@Igor Sevo - 1)
的假设不正确。在全局替换中,[A-Za-z][a-z]*
将匹配 all 大写字母,无论它们在哪里,开始/中间/结束!小写也一样。例如,它匹配ABCDE
,连续 5 次匹配各 1 个大写。
@Igor Sevo - 它仍然不正确,实际上是相同的。实际上,它只是[A-Za-z]
,并且在全局替换中,将匹配每个大写/小写字母。唯一的方法是使用单词边界:\b[A-Za-z][a-z]*
【参考方案1】:
这样的事情怎么样:
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.
【讨论】:
非常感谢。它有效。以上是关于Java中Regex替换的自定义函数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
iOS本地化在Xcode中不适用于Objective-C中的自定义标签[关闭]
我的自定义 UIButton 不能用于替换 leftBarButtonItem