Java String.replace / replaceAll无法正常工作

所以,我正在尝试用Java解析包含(打开)方括号的String输入。 我有str.replace("\\[", "") ,但这绝对没有。 我也尝试过replaceAll ,有多个不同的正则表达式,但输出总是不变的。 我的一部分想知道这是否可能是因为我所有的反斜线字符都显示为日元符号(自从我将日语添加到我的语言中),但是这种方式已经超过一年并且没有让我任何以前的问题。

知道我在这里做错了什么吗?

字符串在Java中是不可变的。 确保将返回值重新分配给相同的String变量:

 str = str.replaceAll("\\[", ""); 

对于常规replace方法,您不需要转义括号:

 str = str.replace("[", ""); 

与往常一样,问题不在于“xxx不起作用”,而是您不知道如何使用它。

首先要做的事情:

  • String是不可变的; 如果您读取.replace().replaceAll()的javadoc,您将看到两者都指定返回一个新的String实例 ;
  • replace()接受一个字符串文字作为它的第一个参数,而不是正则表达式文字。

这意味着您可能打算这样做:

 str = str.replace("[", ""); 

如果你只做过:

 str.replace("[", ""); 

然后将创建新实例,但你忽略它…


另外,这是一个使用String的常见陷阱(另一个是.matches()被错误命名),尽管它们各自的名称,但.replace() 确实用它的第二个参数替换了它的第一个参数的所有出现; 唯一的区别是.replaceAll()接受正则表达式作为第一个参数,并将“正则表达式”表达式作为其第二个参数; 有关更多详细信息,请参阅Matcher.replaceAll()的javadoc。

 public String replaceAll(String regex, String replacement) 

如上面的代码所示,replaceAll方法需要将第一个参数作为正则表达式,因此你需要转义像“ ”,“ ”等字符(带有“ \ ”),如果它们存在于你要替换的替换文本中的字符串。 例如 :

 String oldString = "This is (stringTobeReplaced) with brackets."; String newString = oldString.replaceAll("\\(stringTobeReplaced\\)", ""); System.out.println(newString); // will output "This is with brackets." 

另一种方法是使用Pattern.quote(“str”):

  String newString = oldString.replaceAll(Pattern.quote("(stringTobeReplaced)"), ""); 

这将把字符串视为要替换的文字。