2种StringUtils.split和String.split的比较
StringUtils.split 是对字符串进行拆分的方法。
StringUtils.split 方法有两个包下面有,分别是 org.springframework.util.StringUtils 和 org.apache.commons.lang3.StringUtils。
区别:
1 String str = "今天上山打老虎,打到一只小松鼠。"; 2 String[] arr = StringUtils.split(str, "上山"); 3 4 ==> line_1:今天 5 line_2:打老虎,打到一只小松鼠。
第1种:
1、根据“定界符(delimiter)”将需要拆分的字符串拆分:
如上面根据“上山”拆分,将得到2个结果:“今天” 和 “打老虎,打到一只小松鼠。”。为什么说是根据“定界符”拆分的,因为它不是根据正则表达式来匹配拆分的,所以正则的[]、*等都会被当做是普通的字符。
2、只根据第一次出现的地方匹配拆分:
1 String str = "a今天上山a打老虎,打到一只小松鼠。a"; 2 String[] arr = StringUtils.split(str, "a"); 3 4 ==> line_1: 5 line_2:今天上山a打老虎,打到一只小松鼠。a
如根据“a”匹配拆分,第一次出现“a”的地方刚好是第一个字符,所以左边拆分到的是空字符,并不是没有东西的,如结果的line_1处。但是第二次甚至是最后面都拆分不出来了。
第2种:
1、根据“分隔符(separatorChars)”将需要拆分的字符串拆分:
1 String str = "今天a上山b打老虎,打到a一只c小松鼠。"; 2 String[] arr = StringUtils.split(str, "abc"); 3 4 ==> line_1:今天 5 line_2:上山 6 line_3:打老虎,打到 7 line_4:一只 8 line_5:小松鼠。
如上代码方式拆分,会得到5个结果,按以往的理解似乎是拆分不了的,但是却有5条。因为这个包下的此方式根据“分隔符”拆分是将“abc”按照字符分为“a”、“b”、“c”去分别拆分的,所以有5条结果。
2、会根据“分隔符”出现的地方都进行拆分,但是没有开头和结尾的结果:
1 String str = "a今天a上山a打老虎,打到a一只a小松鼠。a"; 2 String[] arr = StringUtils.split(str, "a"); 3 4 ==> line_1:今天 5 line_2:上山 6 line_3:打老虎,打到 7 line_4:一只 8 line_5:小松鼠。
如上所示,不像第1种包下在最左边会有空字符的结果。此处最左边和最右边都没有结果,但是中间出现多少都可以拆分出来。因为这个分隔符是拆分成一个个字符去匹配拆分的,所以正则的内容也是没有的。
第3种:就是标题中说的String.split
1、能够根据正则(regex)进行所有匹配的拆分。
2、匹配符在最左边,那么最左边会有空字符的结果,而右边没有,这个和第1种一样。
最后做个表格展示一下不同:
转载博客:https://blog.csdn.net/weixin_39752531/article/details/118609797