【问题标题】:Java String.replace/replaceAll not workingJava String.replace/replaceAll 不起作用
【发布时间】:2015-04-30 19:07:01
【问题描述】:

所以,我正在尝试解析 Java 中包含(打开)方括号的字符串输入。我有str.replace("\\[", ""),但这绝对没有任何作用。我也尝试过replaceAll,使用不止一种不同的正则表达式,但输出始终不变。我的一部分想知道这是否可能是由于我所有的反斜杠字符都显示为日元符号(自从我将日语添加到我的语言中),但这种情况已经有一年多了,并没有给我造成任何影响以前有这样的问题。

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

【问题讨论】:

    标签: java regex string replace


    【解决方案1】:

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

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

    对于普通的replace方法,不需要转义括号:

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

    【讨论】:

    • 是的,线索在返回类型中,uchuujin:为什么replaceAll如果修改了String,为什么会返回String;不应该是void吗?
    【解决方案2】:
    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】:

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

      第一件事:

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

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

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

      如果你曾经这样做过:

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

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


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

      【讨论】:

        【解决方案4】:

        为了让它工作,它必须在一个方法中。

        例如:

        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;
            }
        }
        

        【讨论】:

        • 欢迎来到 Stack Overflow。在回答已被接受的答案(寻找绿色✓)以及其他答案的旧问题之前,请确保您的答案添加了新内容或对它们有帮助。这是How to Answer 的指南。
        猜你喜欢
        • 2013-02-07
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 2014-04-19
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多