按字符拆分字符串,返回空值

时间:2014-11-12 07:36:42

标签: java string

我有以下代码

String str= new String("aaa,,bbb,,ccc,");
String[] strArray= str.split(",");

从此我得到strArray

以下的值
strArray = [aaa,'',bbb,'',ccc];

但我想要低于输出

strArray = [aaa,null,bbb,null,ccc,null];

我已经编写了自己的函数来执行此操作,但我想知道是否有任何标准方法可以提供此输出?

如果是,请建议

如果没有,请建议以下代码是否有任何改进。

public List<String> splitStr(String str, char character) {
    List<String> list = null;
    if (StringUtil.isNotEmpty(str)) {
        list = new ArrayList<String>();
        int i;
        char ch;
        int characterIndex, loopStartingIndex = 0;

        if (str.charAt(0) == character) {
            list.add(null);
        } else {
            list.add(str.substring(0, str.indexOf(character)));
            loopStartingIndex = str.indexOf(character);
        }

        int length = str.length();
        for (i = loopStartingIndex; i < length; i++) {
            ch = str.charAt(i);
            if (ch == character) {
                characterIndex = str.indexOf(character, i+1);
                if (characterIndex == i+1 || characterIndex == -1) {
                    list.add(null);
                } else {
                    list.add(str.substring(i+1, characterIndex));
                    i = characterIndex-1;
                }
            }
        }
    }
    /*for (String s : list) {
        System.out.println(s);
    }*/

    return list;
}

修改

我使用abc,,,,方法测试了str.split(",")字符串的代码,我得到了[abc]作为输出,所以我认为aaa,,bbb,,ccc会通过split方法给出3个值。但它正在给[aaa,'',bbb,'',ccc]跳过结尾逗号。

4 个答案:

答案 0 :(得分:2)

您可以将负值传递给String.split(String, int),如

String str = "aaa,,bbb,,ccc,";
String[] strArray = str.split(",", -1);
System.out.println(Arrays.toString(strArray));

输出

    [aaa ,, bbb,ccc,]

这在链接的javadoc中有用地记录为,

  

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

修改

public static void main(String[] args) {
    String str = "aaa,,bbb,,ccc,";
    String[] strArray = str.split(",", -1);
    for (int i = 0; i < strArray.length; i++) {
        if (strArray[i].isEmpty()) {
            strArray[i] = null;
        }
    }
    System.out.println(Arrays.toString(strArray));
}

输出

    [aaa,null,bbb,null,ccc,null]

答案 1 :(得分:1)

如何做更简单的事情

String str= new String("aaa,,bbb,,ccc,");
String[] strArray= str.split(",", -1);

                      This --     ^^

答案 2 :(得分:0)

写一个像:

         String str= new String("aaa,,bbb,,ccc,");
         String[] strArray= str.split(",");
         for(int i=0;i<strArray.length;i++)
            System.out.print(strArray[i]);

         System.out.print(Arrays.toString(strArray));

输出:

   [aaa, , bbb, , ccc]

答案 3 :(得分:0)

以下代码

String str = "aaa,,bbb,,ccc";
String[] strArray = str.split(",");
System.out.println(Arrays.toString(strArray));

输出[aaa, , bbb, , ccc],因此数组有5个元素,而不是你声称的3个元素。你唯一要做的就是遍历数组并用空引用替换空字符串以获得你想要的东西。

您可以传递一个负数作为split的第二个参数,但这只会影响数组末尾的空字符串 。如果是负数,则还包括末尾的空字符串。也就是说,

"aaa,,bbb,".split(",")

返回["aaa","","bbb"],而

"aaa,,bbb,".split(",",-1)

返回["aaa","","bbb",""]