Java - 如何在字符串中的 "\\"或 "("前面添加 ")"

标签 java string replace split

我正在阅读一份文档并删除其中的一些单词。 我有以下功能:

 //Takes a string and removes the word
 private static String removeWord(String string, String word) {
    if (string.contains(word)) {
        String tempWord = word.trim();
        string = string.replaceAll(tempWord, "");
    }
    return string;
}

例如,当我尝试替换时遇到以下问题:

Hello world (

给我以下错误:

Caused by: java.util.regex.PatternSyntaxException: Unclosed group near index 14

做了一些研究,我发现这是因为 split() 需要正则表达式,并且括号用于标记正则表达式中的捕获组。

所以我这样做了:

private static String removeWord(String string, String word) {
    if (string.contains(word)) {
        String [] temp = word.split(" ");
        word = "";
        for (int i = 0; i < temp.length ; i++) {
            if (temp[i].equals("(")){
                word += " "+ "\\(";
            }else if (temp[i].equals(")")){
                word += " "+ "\\)";
            } else {
                word += temp[i] + " ";
            }
        }
        String tempWord = word.trim();
        string = string.replaceAll(tempWord, "");
    }
    return string;
}

此代码不是最佳解决方案。因为有时字符串就像 (Hello world.

如何改进这部分代码?

最佳答案

您似乎正在尝试手动转义正则表达式。我的建议是:不要。

即使您已成功处理 (),您仍然有大量在正则表达式中具有特殊含义的其他字符需要转义,例如 *+[]\? 仅举几例。

幸运的是,有一个非常方便的方法,叫做Pattern.quote它会自动为您执行此操作:

 private static String removeWord(String string, String word) {
    if (string.contains(word)) {
        String tempWord = word.trim();
        string = string.replaceAll(Pattern.quote(tempWord), "");
    }
    return string;
}

关于Java - 如何在字符串中的 "\\"或 "("前面添加 ")",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57304703/

相关文章:

java - 扫描仪中的 URL 结果

python - 循环不会像读取字符串中的其他单词那样读取第一个单词

string - Duval 的算法如何处理奇数长度的字符串?

Java - 如何匹配包含单引号的正则表达式模式?

Python:替换,rstrip() 无法删除换行符

java - 如何正确地将 List 转换为我的对象类型的 ArrayList?

java - int[][] 无法转换为 int

c++ - 自动替换stringstream中的字符

java - splunk 将堆栈跟踪的每一行报告为单独的事件

Excel 公式为每个主题创建一行,并用特定主题的下一个可用值替换列中的缺失值