如何在String.split()中允许空字符串?

时间:2015-05-28 14:54:31

标签: java string split

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

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

其中<US>是ASCII单位分隔符(代码0x1F)。要拆分的代码是

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

除非[DATA]是空字符串,否则这样可以正常工作。在这种情况下,数据就会被跳过。

我希望像[DATA]<US><US>[DATA]<US>这样的字符串返回一个包含三个元素的数组:[DATA]null[DATA]

我该怎么做?

3 个答案:

答案 0 :(得分:9)

如果您将split-1作为第二个参数进行参数化,那么您将获得一个空String,其中[data]缺失(但不是{{1} }})。

null
来自docs

解释

  

如果 n 是非正数,那么模式将被应用尽可能多次,并且数组可以具有任何长度。

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

答案 1 :(得分:0)

这是一个有效的代码

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;
    }

答案 2 :(得分:0)

之后你可以简单地遍历数组并将空字符串分配为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);
            }
        }
    }
}