I try to use Matcher.quoteReplacement
, but I find it can escape $
but do not escape |
. So I try to use the other method StringEscapeUtils.escapeJava
, but it do not escape {
. So I can only write a method like this. Does any java class already have this method?
String sampleStr="$abc.|{@#$abc";
String splitStr="{@#$";
System.out.println(Matcher.quoteReplacement(splitStr));
System.out.println(StringEscapeUtils.escapeJava(splitStr));
System.out.println(splitStr.replace("\\", "\\\\")
.replace("*", "\\*")
.replace("+", "\\+").replace("|", "\\|")
.replace("{", "\\{").replace("}", "\\}")
.replace("(", "\\(").replace(")", "\\)")
.replace("^", "\\^").replace("$", "\\$")
.replace("[", "\\[").replace("]", "\\]")
.replace("?", "\\?").replace(",", "\\,")
.replace(".", "\\.").replace("&", "\\&"));
/* have exception when the split String contains "{"}
System.out.println(sampleStr.split(Matcher.quoteReplacement(splitStr)).length);
System.out.println(sampleStr.split(StringEscapeUtils.escapeJava(splitStr)).length);*/
System.out.println(sampleStr.split(splitStr.replace("\\", "\\\\")
.replace("*", "\\*")
.replace("+", "\\+").replace("|", "\\|")
.replace("{", "\\{").replace("}", "\\}")
.replace("(", "\\(").replace(")", "\\)")
.replace("^", "\\^").replace("$", "\\$")
.replace("[", "\\[").replace("]", "\\]")
.replace("?", "\\?").replace(",", "\\,")
.replace(".", "\\.").replace("&", "\\&")).length);