java使用正则表达式\\r和\\\\r和\\\\\\r来split字符串结果为啥一样
Java源代码中的字符串中的反斜线会被当成转义的,比如你来个String s = "\\(";编译是会错的,说什么非法转义字符。所以你这个字符串String s = "a\\rbc";其实是什么东西啊,一个a一个回车一个b一个c四个字符组成的字符串。String split = s.split("\\r"); // 匹配\u0026#39;\\r\u0026#39;这个字符String split1 = s.split("\\\\r"); // 匹配回车符String split2 = s.split("\\\\\\r"); // 参数是由\u0026#39;\\\u0026#39;和\u0026#39;\\r\u0026#39;组成的字符串这个split方法的参数是一个正则表达式,然后呢这个\\r(这个真是捉急啊,一个反斜线和一个字母r组成的字符串)能匹配回车符,怎么表示由一个反斜线和一个字母r组成的字符串呢,用"\\\\r"。所以s.split("\\\\r");匹配的就是回车符,那个s里面有回车符吗,有啊,第二个字符不就是么。然后,s.split("\\r");是个什么东西,里面的参数就是一个字符(回车符)。s.split("b")这个好理解吧,里面参数就是一个字符(b),用b去切 和 用回车符去切 道理一样的哈。最后看这个,s.split("\\\\\\r");这个参数是由一个反斜杠和一个回车符这两个字符组成的字符串,最后去切的时候其实是用的回车符去切的,换句话说这种情况和s.split("\\r");是一样的。内部实现在这:public String split(String regex, int limit) {/* fastpath if the regex is a (1)one-char String and this character is not one of the RegEx\u0026#39;s meta characters ".$|(){this}; // Add remaining segment if (!limited || list.size() \u0026lt; limit) list.add(substring(off, value.length)); // Construct result int resultSize = list.size(); if (limit == 0) {while (resultSize \u0026gt; 0 \u0026amp;\u0026amp; list.get(resultSize - 1).length() == 0) { resultSize--; } } String result = new String; return list.subList(0, resultSize).toArray(result); } /* 只有第二个参数会进入到这里,使用正则表达式的规则去匹配,前面的都是简单的比较单个字符 */return Pattern.compile(regex).split(this, limit);}
推荐阅读
- 『先进』长江流域最先进洗舱站在宁投运 油可分离回收,水能循环使用
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 汽车|迈凯伦Artura不再使用迈凯伦祖传V8引擎了?
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- python的html5lib这个库咋使用啊我在网上也没有找到相关文档
- win7中本地连接跟无线网卡同时使用时是怎么样的模式
- 可不可能利用网盘的秒传功能使用伪造的MD5(或其他信息)值进行文件分享
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
- 为啥很多企业给用户发邮件会使用noreply/no-reply@xx.xx的邮箱
- win10激活的问题
