我正在阅读一份文档并删除其中的一些单词。 我有以下功能:
//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/