字符串分割操作到底有多少坑

  

微信公众号

  

字符串分割操作到底有多少坑”> <br/>长字符串切分,取其中元素封装或者将封装信息组合成长字符串都是常规操作,但是这种长字符串往往是不可控的,如一个长字符串就是由一个元素组成,或者存在空字符串的元素,看似这并没有什么问题,但是使用不同工具类的<代码> </代码>方分裂法进行切分结果是完全不同的。不知道你是否遇到这样的坑,下面一起来看看。</p>
  <h3>字符串类自带的分割方法</h3>
  <p>直接使用字符串本身自带的<代码> </代码>分裂方法,看对不同字符串的切分结果。</p>
  <ul>
  <李>
  <p>没有分隔符的字符串</p>
  <pre> <=坝镅詊ava代码类>//str=?”
  公共静态孔隙split2 (String str) {
  String []=str.split分裂(   

切分后结果是单个元素<代码>(“1”)>   李   <李>   

有分隔符,分隔符切分后没有空字符串出现

  
 <=坝镅詊ava代码类>//str=?、2”//代码同上…… 
  

切分后结果是<代码>(“1”,“2”)>   李   <李>   

有分隔符,分隔符切分后有空字符串出现

  
 <=坝镅詊ava代码类>//str=?、2”//代码同上…… 
  

切分后结果是<代码>[" 1 "," "," 2 "]>   李      

最终总结不管分隔符有多少个,最终切分的结果都是n + 1个元素。也是正常业务逻辑所需要的。但是这里有一个问题,如果传入的字符串是<代码>零> NullPointException 异常,需要另外加一层非空判断。

  

共享提供的stringutil的工具类

  

具体全限定类名是<代码> org.apache.commons.lang3.StringUtils> isNotBlank 方法,使用集合元素组装字符串,用<代码>与方法等等。现在来看一下<代码> 方分裂法在不同的情况下是如何实现。

  
      <李>   

    没有分隔符的字符串

      
     <=坝镅詊ava代码类>//str=?”
      公共静态孔隙split1 (String str) {
      String []=org.apache.commons.lang3.StringUtils.split分裂(str, ", ");
      (字符串分裂:分裂){
      System.out.println (“→”+分);
      }
      system . out。println(“数组长度:“+ splits.length);
      } 
      

    切分后的结果是单个元素<代码>(“1”)>   李   <李>   

    有分隔符,分隔符切分后没有空字符串出现

      
     <=坝镅詊ava代码类>//str=?、2”//代码同上…… 
      

    切分后的结果是两个元素<代码>(“1”,“2”)>   李   <李>   

    有分隔符,分隔符切分后有空字符串出现

      
     <=坝镅詊ava代码类>//str=?、2”//代码同上…… 
      

    切分后的结果和上一种情况结果是一样的,也是两个元素<代码>(“1”,“2”)>   李   

  

从这里就可以看的出来问题的所在,当出现空字符串的时候,会自动将空字符串丢弃,只保留非空字符串。但是这里还是需要注意的是如果是空格,也会形成一个元素,比如现在str输入的是<代码> 1,,2 ">   

春天下util包提供的stringutil的工具类

  

全限定类名<代码> org.springframework.util.StringUtils> 方分裂法上有什么不同呢?

  
      <李>   

    没有分隔符的字符串

      
     <=坝镅詊ava代码类>//str=?”
      公共静态空射(String str) {
      String []=org.springframework.util.StringUtils分裂。分割(str, ", ");
      (字符串分裂:分裂){
      System.out.println (“→”+分);
      }
      system . out。println(“数组长度:“+ splits.length);
      } 
      

    字符串分割操作到底有多少坑