1、split方法中使用了正则表达式,比如
"aaa|bbb|ccc"
转义的时候就需要split(\|),在转义字符比较少的时候这没什么,但是如果类似下面的
"ds\\|'\'\t\d"
这种复杂的字符串对于正则表达式不熟悉的人就比较困难了。
有没有不支持正则表达式的方法,或者能解决这种问题的办法(当然学好正则表达式是一种好方法O(∩_∩)O)。
不使用正则的话只能手动拆分,给你一个刚出炉热乎乎的方法。
PS:里面判断没有非常严格,可能有BUG,可以自己修复
public static void main(String[] args) {
String str = "abcdjlfaofaldvaabc adfalekgjabclkjl";
String splitStr = "abc";
String[] testArray = split(str, splitStr);
System.out.println(JSON.toJSONString(testArray));
}
private static String[] split(String originalStr, String splitStr) {
int originalLength = originalStr.length();
int splitLength = splitStr.length();
List<String> targetList = new ArrayList<String>();
if (splitLength > originalLength) {
targetList.add(originalStr);
} else if (splitLength == originalLength) {
if (!originalStr.equals(splitStr)) {
targetList.add(originalStr);
}
} else {
StringBuilder sb = new StringBuilder(originalStr);
String tempStr;
int start = 0;
while (sb.length() > 0) {
tempStr = sb.substring(start, start + splitLength);
if (tempStr.equals(splitStr)) {
targetList.add(sb.substring(0, start));
sb.delete(0, start + splitLength);
start = 0;
} else {
start++;
if (start + splitLength > sb.length()) {
targetList.add(sb.toString());
sb.setLength(0);
}
}
}
}
String[] targetArray = new String[targetList.size()];
for (int i = 0; i < targetList.size(); i++) {
targetArray[i] = targetList.get(i);
}
return targetArray;
}
先转义一遍吧s.split(Pattern.quote(separator));
update: 关于为啥能实现转义
关键在于Java自定义的
\Q Nothing, but quotes all characters until \E //转义直到\E
\E Nothing, but ends quoting started by \Q
quote方法类似返回了"\\Q" + s + "\\E";
(当然还有一些其他的情况(如待转义的字符串本身就有\E
之类的),但是这个是最根本的情况)