【问题标题】:How to allow empty strings in String.split()? [duplicate]如何在 String.split() 中允许空字符串? [复制]
【发布时间】:2015-08-11 04:02:24
【问题描述】:

我正在使用String.split() 来拆分字符串。我收到的字符串有这样的结构:

[data]<US>[data]<US>

其中&lt;US&gt; 是 ASCII 单元分隔符(代码 0x1F)。要拆分的代码是

String[] fields = someString.split(String.valueOf(0x1f));

这很好用,除非[DATA] 是一个空字符串。在这种情况下,只会跳过数据。

我想要一个像[DATA]&lt;US&gt;&lt;US&gt;[DATA]&lt;US&gt; 这样的字符串来返回一个包含三个元素的数组:[DATA]null[DATA]

我该怎么做?

【问题讨论】:

    标签: java string split


    【解决方案1】:

    如果您将split 参数化为-1 作为第二个参数,您将得到一个空的String,其中缺少[data](但不是null)。

    someString.split(String.valueOf(0x1f), -1);
    

    解释来自docs

    如果 n 为非正数,则该模式将被应用尽可能多的次数,并且该数组可以具有任意长度。

    .. 其中 n 是限制,即第二个参数。

    【讨论】:

      【解决方案2】:

      之后您可以简单地遍历数组并将空字符串分配为 null:

      public class StringSplitting {
      
          public static void main(String[] args){
      
              String inputs = "[data]<US><US>[data]<US>";
      
              String[] fields = inputs.split("<US>");
      
      
              //set empty values to null
              for(int i = 0; i < fields.length; i++){
                  if(fields[i].length() == 0){
                      fields[i] = null;
                  }
              }
      
              //print output
              for(String e: fields){
                  if(e == null){
                      System.out.println("null");
                  }else{
                      System.out.println(e);
                  }
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        这是一个有效的代码

        String s="[DATA]<US><US>[DATA]<US>";
        String arr []= s.split("<US>");
        for(String str :arr) {
            if(str.equals("")) {
                System.out.println("null");
            } else {
                System.out.println(str);
            }       
        }
        

        输出::

        [DATA]
        null
        [DATA]
        

        根据您的要求更具体:

        public String [] format(String s) {     
                String arr []= s.split("<US>");     
                for(int i=0;i<arr.length;i++)
                {
                    if(arr[i].equals(""))
                    {
                        arr[i]=null;
                    }           
                }
                return arr;
            }
        

        【讨论】:

        • 我的意思是这实际上是行不通的。没有提供限制时没有空字符串。
        • @BartFriederichs 请详细说明。没有限制是什么意思?
        • 查看接受的答案。
        猜你喜欢
        • 1970-01-01
        • 2015-04-20
        • 1970-01-01
        • 2014-06-21
        • 2015-10-04
        • 2018-08-11
        • 1970-01-01
        • 2019-07-16
        • 2019-06-01
        相关资源
        最近更新 更多