如何在Java中替换所有的"[", "]"和双引号

3

我在使用 replaceAll 方法替换方括号和双引号时遇到了困难。有什么想法吗?

编辑:

目前我尝试过:

replace("\[", "some_thing") // returns illegal escape character
replace("[[", "some_thing") // returns Unclosed character class
replace("^[", "some_thing") // returns Unclosed character class

尝试使用replaceAll("^[", "something"),replaceAll("[", "...")和replace("[", " ")。 - chutsu
您需要向我们展示一个包含测试字符串、您的代码以及所获得结果的小型测试程序。 - Hovercraft Full Of Eels
你是用同一个字符串替换它们吗? - Hunter McMillen
你想用什么来替换它们? - FailedDev
URLEncoder 没有起作用,还是出了什么问题?http://stackoverflow.com/questions/8301699/httpclient-httpget-doesnt-accept-square-brackets - Rob Hruska
@FailedDev - 我猜它们分别被替换为%5B%5D - Rob Hruska
5个回答

7

不要使用replaceAll,而应该使用replace。前者使用正则表达式,其中[]是正则表达式中的特殊字符。

String replaced = input.replace("]", ""); //etc

双引号在Java中是特殊字符,所以需要使用单个反斜杠进行转义("\"")。
如果要使用正则表达式,则需要对这些字符进行转义并将它们放入字符类中。字符类用 [] 包围,转义字符的方法是在前面加上反斜杠 \。然而,由于反斜杠在Java中也是特殊字符,因此它也需要转义。因此,为了让正则表达式引擎得到一个反斜杠,您必须使用 两个 反斜杠(\\[)。
最终结果应该像这样(如果您要使用正则表达式):
String replaced = input.replaceAll("[\\[\\]\"]", "");

3

replaceAll方法是针对正则表达式进行操作的。您可能只想使用 "replace" 方法,尽管它的名称是replace,但它确实可以替换所有出现的内容。

根据您的编辑,您可能需要:

someString
.replace("[", "replacement")
.replace("]", "replacement")
.replace("\"", "replacement")

或者,使用适当的正则表达式,这是我实际上推荐的方法,如果你愿意学习正则表达式的话(可以参考Mark Peter的答案获得一个工作示例)。

1

replaceAll()接受一个正则表达式,因此您需要转义特殊字符。如果您不想使用复杂的正则表达式,请使用replace()

String s = "[h\"i]";
System.out.println( s.replace("[","").replace("]","").replace("\"","") );

在使用双引号时,你需要这样转义它们:"\""


0

在Java中:

String resultString = subjectString.replaceAll("[\\[\\]\"]", "");

这将用空白替换[]"


1
然而,它将仅仅按照[]"的顺序进行替换。它不会替换每个字符的单独出现。 - Mark Peters
@MarkPeters 哎呀..我猜时间已经很晚了 :) - FailedDev

0

或者,如果您希望将"[]替换为不同的字符(而不是全部替换为空字符串),您可以使用StringUtils类中的replaceEachRepeatedly()方法来实现,该类来自于Commons Lang

例如:

String input = "abc\"de[fg]hi\"";
String replaced = StringUtils.replaceEachRepeatedly(input, 
    new String[]{"[","]","\""}, 
    new String[]{"<open_bracket>","<close_bracket>","<double_quote>"});
System.out.println(replaced);

打印输出以下内容:
abc<double_quote>de<open_bracket>fg<close_bracket>hi<double_quote>

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