【问题标题】:Java: replace "[" "]" from text files stringsJava:从文本文件字符串中替换“[”“]”
【发布时间】:2011-06-30 19:14:59
【问题描述】:

我正在使用

str.replaceAll("GeoData[", "");

在我的文本文件中的某些字符串中替换“[”符号,但我得到:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 7
GeoData[
       ^
    at java.util.regex.Pattern.error(Pattern.java:1713)

我该如何解决这个问题?

【问题讨论】:

    标签: java regex string replace


    【解决方案1】:

    replaceAll 方法将参数解释为正则表达式。在正则表达式中,如果你想要它的字面意思,你必须转义[,否则它会被解释为字符类的开始。

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

    如果您不打算使用正则表达式,请改用 replace,正如 Bozho 在他的 answer 中提到的那样。

    【讨论】:

    • 谢谢,还有一个问题:符号 "\" 呢?我应该使用 "\\\" 吗?好像不行……
    • @Patrick:从你的问题中不清楚你为什么使用replaceAll。也许您打算按照 Bozho 的建议使用替换?
    • 是的,你说得对。我实际上已经解决了,我只是想知道如何替换符号“\”(这是一个不同的问题)。
    • @Patrick 应该是 \\\\ 您需要为 java 字符串和正则表达式转义 \。所以 \\\\ 将有效地创建一个字符串 \\ ,然后正则表达式解析器将其视为转义 \
    • 警告:如果 JRE ,replaceCharSequence 将触发异常
    【解决方案2】:

    使用非正则表达式方法String.replace(..):str.replace("GeoData[", "")

    (人们往往会错过这个方法,因为它需要CharSequence 作为参数,而不是String。但是String 实现了CharSequence

    【讨论】:

    • 顺便说一句:在设计字符串密集型 API 时,使用CharSequence 而不是String 是一个非常好的主意。如果用户可以无缝使用StringBuilderStringBuffer,而不需要明确的toString(),他们将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多