我需要删除字符串中的一些子字符串(在大型数据集中)。子字符串通常包含特殊字符,如:。,^,/,...和replaceAll()会将它们视为正则表达式的特殊字符,例如点将匹配任何字符,这不是我想要的。
是否有其他函数可以执行“替换”而不将第一个参数视为正则表达式?
答案 0 :(得分:2)
只需使用String.replace()。它的功能相同,但它处理内部转义特殊字符,以避免您担心正则表达式。
答案 1 :(得分:2)
你可以按字面意思匹配。例如,如果我们想匹配“<。]} ^”,我们可以这样做:
Pattern pat=Pattern.compile("<.]}^", PATTERN.LITERAL");
并使用该模式。
您也可以使用反斜杠来逃避它。请注意,字符串文字本身需要反斜杠,因此转义单个点将采用两个反斜杠,如下所示:
Pattern pat=Pattern.compile("\\.");
编译器会看到第一个反斜杠,第二个反斜杠被视为正则表达式解析器的反斜杠。
答案 2 :(得分:0)
只需使用String.replace(String, String)
,而不是replaceAll
。 String.replace
不会将其论证视为正则表达式。
答案 3 :(得分:0)
replace
类中有两个名为String
的方法执行替换而不将其参数视为正则表达式。
一种replace
方法将一个char
替换为另一个char
。
另一个replace
方法将CharSequence
(通常为String
)替换为另一个CharSequence
。
从第二个replace
方法引用Javadoc:
替换此字符串中与文字目标匹配的每个子字符串 具有指定文字替换序列的序列。
答案 4 :(得分:0)
是否有其他功能可以执行“替换”
是的,它被称为replace
:)它与replaceAll
之间的主要区别在于它会转义正则表达式特殊字符。
BTW如果你想在字符串中转义正则表达式的特殊字符,你可以
yourString = Pattern.quote(yourString)
,"\\Q"
和"\\E"
,只能逃避一些特殊字符
"\\"
,例如\\.
"["
和"]"
[.]
围绕它们来转义大多数特殊字符。