我需要删除字符串中的一些子字符串(在大型数据集中)。子字符串通常包含特殊字符,例如:., ^, /,... 而 replaceAll() 会将它们视为正则表达式的特殊字符,例如点将匹配任何字符,这并不是我真正想要的。
是否有其他功能可以在不将第一个参数视为正则表达式的情况下进行“替换”?
我需要删除字符串中的一些子字符串(在大型数据集中)。子字符串通常包含特殊字符,例如:., ^, /,... 而 replaceAll() 会将它们视为正则表达式的特殊字符,例如点将匹配任何字符,这并不是我真正想要的。
是否有其他功能可以在不将第一个参数视为正则表达式的情况下进行“替换”?
只需使用 String.replace()。它的功能相同,但它处理在内部转义特殊字符以避免您不必担心正则表达式。
你可以从字面上匹配。例如,如果我们想匹配 "<.]}^",我们可以这样做:
Pattern pat=Pattern.compile("<.]}^", PATTERN.LITERAL");
并使用该模式。
您也可以使用反斜杠来转义它。请注意,字符串文字本身需要反斜杠,因此转义单个点将需要两个反斜杠,如下所示:
Pattern pat=Pattern.compile("\\.");
第一个反斜杠被编译器看到,第二个反斜杠被用作正则表达式解析器的反斜杠。
只是使用String.replace(String, String)
,不是replaceAll
。 String.replace
不将其参数视为正则表达式。
是否还有其他功能可以“替换”
是的,它被称为replace
:) 它之间的主要区别在于replaceAll
它转义了正则表达式特殊字符。
顺便说一句,如果你想在字符串中转义正则表达式的特殊字符,你可以
yourString = Pattern.quote(yourString)
,"\\Q"
用和包围它"\\E"
,只转义一些特殊字符,你可以
"\\"
在他们喜欢之前使用\\.
"["
and包围来转义。"]"
[.]