场景

出于业务考虑,将多个字符串拼接起来时,使用的分隔符是;,;。如果要将这样一个拼接来的字符串分割成原本的多个字符串时,就需要使用到jdk自带的split()方法。不过因为公司的编程规范,改为使用了Apache工具类的StringUtils.split()。

之后就发现,当被拼接的字符串里含有;或,时,就会出现分割不正确的问题。

具体例子

下面的代码,使用了上述的两种split方法,猜猜结果是什么。

public class Test {

    public static void main(final String[] args) {
final String str = "老肥,老肥;是个,逗比";
final String seperator = ";,;";
//Apache工具类的split方法
final String[] result1 = StringUtils.split(str, seperator);
for (final String string : result1) {
System.out.println(string);
} System.out.println("############分割线###########");
//jdk的split方法
final String[] result2 = str.split(seperator);
for (final String string : result2) {
System.out.println(string);
}
}
}

分割的结果如下:

老肥
老肥
是个
逗比
############分割线###########
老肥,老肥;是个,逗比

StringUtils.split()和string.split()的区别

StringUtils.split()是把分隔符拆成一个个单独的字符,再用这些字符去把字符串进行分割的。只要匹配到了分隔符中的任意一个字符,就会进行分割。而string.split()是把分隔符作为一个整体来对字符串进行分割。

比如分隔符是;,;,那么在用StringUtils.split()时,只要被分割的字符串里遇到;或,,就会被分割。而在用string.split()时,必须被分割的字符串里遇到;,;时才会被分割。

另外string.split()的分隔符参数其实是正则表达式,而StringUtils.split()的分隔符参数就只是个普通的字符串。此外,StringUtils.split()是null-safe的,已经帮你判空了,这也是公司规范要我们使用Apache工具类的原因。不过由于这里的业务要求,最终还是选择使用string.split()。

最后附上StringUtils.split()的部分底层实现:

//standard case
while (i < len) {
if (separatorChars.indexOf(str.charAt(i)) >= 0) {
if (match || preserveAllTokens) {
lastMatch = true;
if (sizePlus1++ == max) {
i = len;
lastMatch = false;
}
list.add(str.substring(start, i));
match = false;
}
start = ++i;
continue;
}
lastMatch = false;
match = true;
i++;
}

StringUtils.split()和string.split()的区别的更多相关文章

  1. Java Tips: 使用Pattern.split替代String.split

    String.split方法很常用,用于切割字符串,split传入的参数是正则表达式,它的内部是每次都comiple正则表达式,再调用Pattern.split方法: public String[] ...

  2. String.split()与StringUtils.split()

    我们平时进行简单的字符串分割的时候,尽量不要用String自身的split方法,它是匹配正则表达式的,如果遇到$这种特殊字符,需要转义一下.用StringUtils.split()方法会更方便 使用a ...

  3. split("\\s+") 和 split(" +") 有什么区别?

    原文地址:https://blog.csdn.net/it_taojingzhan/article/details/51968993 "hello world, this is Al&quo ...

  4. String.split()与StringUtils.split()的区别

    import com.sun.deploy.util.StringUtils; String s =",1,,2,3,4,,"; String[] split1 = s.split ...

  5. String split方法与Guava Splitter用法区别

    String split方法与Guava Splitter用法区别 今天同事写了一段使用String split方法的代码,如下所示,同事期望得到的是字符"1",但是没想到却得到空 ...

  6. .split(",", -1);和.split(",")的区别

    .split(",", -1);和.split(",")的区别在于://eg:String a="河南省,,金水区".//a.split(& ...

  7. java学习笔记之String.Split方法

    hello 大家好,好久不见,今天 我们要讨论的是java的split方法,或许你很早就知道了,但你真的知道吗? 我们来看看吧. 首先我们来看看我们最常用的split()方法也就是单个参数的方法 pu ...

  8. split slice splice的简单区别

    split slice splice的简单区别 split: 分割 //字符串方法 string.split let str = 'hello world'; //str.split('') 以什么东 ...

  9. 字符串切分 String.Split 和 Regex.Split

    当切割字符串的是单个字符时可使用String.Split string strSample="ProductID:20150215,Categroy:Food,Price:15.00&quo ...

随机推荐

  1. SQL Server 2005中top关键字的用法

    1.返回N条记录数 select top n * from <表名> [查询条件] 2.返回总结果集中指定百分比记录数 select top n percent * from <表名 ...

  2. 谷歌浏览器使用SelectorGadget和Xpath Helper获取xpath和css path

    在上篇文章里,介绍了如何在火狐浏览器中获取网页元素的xpath和css path. 这篇文章将介绍,在谷歌浏览器中使用SelectorGadget和Xpath Helper实现同样功能. 这两个谷歌浏 ...

  3. WebViewJavascriptBridge的简单应用

    原文链接:http://www.jianshu.com/p/ca496cb680fe前言 当下,很多APP里面都会有HTML5网页,我们除了简单的用WebView加载显示外,很多情况下,我们还需要和W ...

  4. vue2.x源码理解

    也不知道哪股风潮,钻研源码竟成了深入理解的标配.我只想说一句,说的很对 准备工作 从GitHub上面下载vue的源码(https://github.com/vuejs/vue) 了解下Flow,Flo ...

  5. MYSQL进阶学习笔记十七:MySQL定期维护!(视频序号:进阶_36)

    知识点十八:MySQL定期维护(37) 一.Mysql的定时器 所谓的定时器,指的是在某个时间段去执行同样的代码.比如闹钟.每到指定的时间闹铃就会响.同样的,我们这个定时器,只要满足我们的一个定时条件 ...

  6. 【转载】String和StringBuffer的区别,以及StringBuffer的常用方法介绍

    String与StringBuffer的区别简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改:而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象.Stri ...

  7. js事件传播的一个疑惑

    在学习事件传播的时候,发现一个问题,当时是这样子的. 我给多层元素分别绑定了冒泡和捕获事件.按道理应该先从外向内执行完所有的捕获事件,再由内向外执行所有的冒泡事件. 但是天不随人愿啊,有个元素偏偏先执 ...

  8. XML简介——可扩展标记语言(Extensible Markup Language)

    (What) XML是什么? XML指可扩展标记语言(Extensible Markup Language) 1.  XML是一种标记语言,类似HTML. 2.  XML具有自我描述性 3.  XML ...

  9. MySQL丨分页查询

    直奔主题 一.sql语句:select * from table limit startPageNum,everyPageNum 1)语句解析: table:你要查询的表 startPageNum:从 ...

  10. EDM文件编写规范及注意事项

    [设计EDM邮件] (1)乱码:你没法知道所有用户的系统环境,因此使用utf8来避免乱码是非常重要的 (2)绝对URL:若是相对URL,用户在打开页面是将看不到图片 (3)图片Alt属性:大多数邮件服 ...