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

时间:2015-04-30 19:07:01

标签: java regex string replace

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

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

4 个答案:

答案 0 :(得分:4)

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

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

对于正常的replace方法,您不需要逃避括号:

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

答案 1 :(得分:0)

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

首先要做的事情:

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

这意味着你可能会这样做:

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

如果你只做过:

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

然后将创建新实例,但您忽略它......

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

答案 2 :(得分:0)

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)"), "");

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

答案 3 :(得分:0)

要使其正常运行,必须在方法内部。

例如:

public class AnyClass {
    String str = "gtrg4\r\n" + "grtgy\r\n" + "grtht\r\n" + "htrjt\r\n" + "jtyjr\r\n" + "kytht";

    public String getStringModified() {
        str.replaceAll("\r\n", "");

        return str;
    }
}