使用 StringUtils.split 的坑( 二 )


// Optimise 1 character casefinal char sep = separatorChars.charAt(0);while (i < len) {if (str.charAt(i) == sep) { // 直接比较...【使用 StringUtils.split 的坑】3. 分隔符为字符串
总计逻辑同上,只是判断逻辑变为包含判断 。
// standard casewhile (i < len) {if (separatorChars.indexOf(str.charAt(i)) >= 0) { // 包含判断if (match || preserveAllTokens) {如何解决?1. 使用 splitByWholeSeparator 方法 。
我们想要的是按整个字符串分割,StringUtils 工具类中已经存在具体的实现了,使用 splitByWholeSeparator 方法 。
String str = "aabbccdd";String[] resultArray = StringUtils.splitByWholeSeparator(str, "bc");for (String s : resultArray) {System.out.println(s);}// 输出aabcdd2. 使用 Google Guava 工具库
关于 Guava 工具库的使用,之前也写过一篇文章,可以参考:Guava - 拯救垃圾代码
String str = "aabbccdd";Iterable<String> iterable = Splitter.on("bc").omitEmptyStrings() // 忽略空值.trimResults() // 过滤结果中的空白.split(str);iterable.forEach(System.out::println);// 输出aabcdd3. JDK String.split 方法
使用 String 中的 split 方法可以实现想要效果 。
String str = "aabbccdd";String[] res = str.split("bc");for (String re : res) {System.out.println(re);}// 输出aabcdd但是 String 的 split 方法也有一些坑,比如下面的输出结果 。
String str = ",a,,b,";String[] splitArr = str.split(",");Arrays.stream(splitArr).forEach(System.out::println);// 输出ab开头的逗号,前出现了空格,末尾的逗号,后却没有空格 。
一如既往,文章中代码存放在 Github.com/niumoo/javaNotes.
<完>
文章持续更新,可以微信搜一搜「 程序猿阿朗」或访问「程序猿阿朗博客 」第一时间阅读 。本文 Github.com/niumoo/JavaNotes 已经收录,有很多知识点和系列文章 , 欢迎Star 。

推荐阅读