正则表达式 - java中split去转义的方法?
怪我咯
怪我咯 2017-04-18 09:33:53
[Java讨论组]

1、split方法中使用了正则表达式,比如

"aaa|bbb|ccc"

转义的时候就需要split(\|),在转义字符比较少的时候这没什么,但是如果类似下面的

"ds\\|'\'\t\d"

这种复杂的字符串对于正则表达式不熟悉的人就比较困难了。

有没有不支持正则表达式的方法,或者能解决这种问题的办法(当然学好正则表达式是一种好方法O(∩_∩)O)。

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
PHPz

先转义一遍吧
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之类的),但是这个是最根本的情况)

阿神

不使用正则的话只能手动拆分,给你一个刚出炉热乎乎的方法。

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;
    }
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号