Java:从文本文件字符串中替换“ [”“]”

7

我正在使用

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)

我该怎么解决这个问题?
2个回答

17

replaceAll方法将参数解释为正则表达式。在正则表达式中,如果要使用方括号[的字面含义,必须对其进行转义,否则它会被解释为字符类的开始。

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

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


谢谢,还有一个问题:反斜杠符号“\”怎么处理?我应该使用“\"”吗?好像不起作用... - aneuryzm
1
@Patrick:从你的问题中并不清楚你为什么要使用replaceAll。也许你是想像Bozho建议的那样使用replace? - Mark Byers
是的,你说得对。我已经解决了,只是想知道如何替换符号“\”(这是另一个问题)。 - aneuryzm
2
@Patrick 应该是 \\ 你需要为Java字符串和正则表达式转义\。因此,\\ 将有效地生成一个 \ 字符串,然后正则表达式解析器将其视为已转义的 \。 - DaVinci
警告:如果JRE <1.5,则使用CharSequence替换将触发异常。 - manuell

11

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

(人们往往会忽略这个方法,因为它接受一个CharSequence参数而不是String。但是String实现了CharSequence)


1
顺便提一下:在设计字符串密集型API时,使用CharSequence而不是String是一个非常好的主意。如果用户可以无需显式调用toString()就能无缝地使用StringBuilderStringBuffer,他们会感激不尽。 - Tomasz Nurkiewicz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接