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替换的自定义函数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有多个参数的自定义函数中使用 mutate

iOS本地化在Xcode中不适用于Objective-C中的自定义标签[关闭]

我的自定义 UIButton 不能用于替换 leftBarButtonItem

java - 如何在spring boot java中编写一个函数来处理JPA存储库中的自定义查询?

用在张量流中具有变量依赖性的自定义操作替换图中的节点

C#Regex使用匹配值替换