繁体   English   中英

Java String.replace/replaceAll 不起作用

[英]Java String.replace/replaceAll not working

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

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

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

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

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

str = str.replace("[", "");
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)"), "");

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

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

第一件事:

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

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

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

如果你只做:

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

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


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

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

例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM