我在使用replaceAll方法替换方括号和双引号时遇到了困难。有什么想法吗?
编辑:
到目前为止,我已经尝试过:
replace("\[", "some_thing") // returns illegal escape character
replace("[[", "some_thing") // returns Unclosed character class
replace("^[", "some_thing") // returns Unclosed character class
答案 0 :(得分:7)
请勿使用replaceAll
,请使用replace
。前者使用正则表达式,[]
是正则表达式中的特殊字符。
String replaced = input.replace("]", ""); //etc
双引号在Java中是特殊的,所以你需要用一个反斜杠("\""
)来转义它。
如果要使用正则表达式,则需要转义这些字符并将它们放在字符类中。字符类被[]
包围,并且通过在前面加上反斜杠\
来转义字符。但是,因为Java中的反斜杠也特殊,所以它也需要进行转义,因此要为正则表达式引擎提供反斜杠,必须使用 two 反斜杠({{ 1}})。
最后它应该是这样的(如果你使用正则表达式):
\\[
答案 1 :(得分:3)
replaceAll方法针对Regular Expressions运行。您可能只是想使用“replace”方法,尽管它的名称可以替换所有出现的内容。
查看您的编辑,您可能想要:
someString
.replace("[", "replacement")
.replace("]", "replacement")
.replace("\"", "replacement")
或者,使用适当的正则表达式,如果您愿意学习正则表达式,我会实际推荐的方法(参见Mark Peter的答案以获得一个工作示例)。
答案 2 :(得分:1)
replaceAll()
采用正则表达式,因此您必须转义特殊字符。如果您不想要所有花哨的正则表达式,请使用replace()
。
String s = "[h\"i]";
System.out.println( s.replace("[","").replace("]","").replace("\"","") );
使用双引号,您必须像这样转义它们:"\""
答案 3 :(得分:0)
在java中:
String resultString = subjectString.replaceAll("[\\[\\]\"]", "");
这将取代[]"
一无所获。
答案 4 :(得分:0)
或者,如果您希望将"
,[
和]
替换为不同的字符(而不是使用空字符串替换所有字符),则可以使用replaceEachRepeatedly()
方法来自StringUtils的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>