首页 > java中split去转义的方法?

java中split去转义的方法?

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之类的),但是这个是最根本的情况)

【热门文章】
【热门文章】