Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Java中正则表达式替换的自定义函数_C#_Java_Regex_Replace_Matchevaluator - Fatal编程技术网

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.