我在使用 replaceAll 方法替换方括号和双引号时遇到了困难。有什么想法吗?
编辑:
目前我尝试过:
replace("\[", "some_thing") // returns illegal escape character
replace("[[", "some_thing") // returns Unclosed character class
replace("^[", "some_thing") // returns Unclosed character class
我在使用 replaceAll 方法替换方括号和双引号时遇到了困难。有什么想法吗?
编辑:
目前我尝试过:
replace("\[", "some_thing") // returns illegal escape character
replace("[[", "some_thing") // returns Unclosed character class
replace("^[", "some_thing") // returns Unclosed character class
不要使用replaceAll
,而应该使用replace
。前者使用正则表达式,其中[]
是正则表达式中的特殊字符。
String replaced = input.replace("]", ""); //etc
"\""
)。[]
包围,转义字符的方法是在前面加上反斜杠 \
。然而,由于反斜杠在Java中也是特殊字符,因此它也需要转义。因此,为了让正则表达式引擎得到一个反斜杠,您必须使用 两个 反斜杠(\\[
)。String replaced = input.replaceAll("[\\[\\]\"]", "");
replaceAll()
接受一个正则表达式,因此您需要转义特殊字符。如果您不想使用复杂的正则表达式,请使用replace()
。
String s = "[h\"i]";
System.out.println( s.replace("[","").replace("]","").replace("\"","") );
在使用双引号时,你需要这样转义它们:"\""
在Java中:
String resultString = subjectString.replaceAll("[\\[\\]\"]", "");
这将用空白替换[]"
。
[]"
的顺序进行替换。它不会替换每个字符的单独出现。 - Mark Peters或者,如果您希望将"
、[
和]
替换为不同的字符(而不是全部替换为空字符串),您可以使用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>
URLEncoder
没有起作用,还是出了什么问题?http://stackoverflow.com/questions/8301699/httpclient-httpget-doesnt-accept-square-brackets - Rob Hruska%5B
和%5D
。 - Rob Hruska