String的split方法中可能出错

时间:2013-11-28 14:48:31

标签: java split

我有下一个代码:

String test = "A,B,,,,,";

String[] result = test.split(",");

for(String s : result){
    System.out.println("$"+s+"$");
}

输出结果为:

$ A $
$ B $

和我的预期:

$ A $
$ B $
$$
$$
$$
$$
$$

但是,我修改了代码如下:

String test = "A,B,,,,,C";

String[] result = test.split(",");

for(String s : result){
    System.out.println("$"+s+"$");
}

结果是:

$ A $
$ B $
$$
$$
$$
$$
$ C $

其他变体:

String test = "A,B,,,C,,";

String[] result = test.split(",");

for(String s : result){
    System.out.println("$"+s+"$");
}

结果:

$ A $
$ B $
$$
$$
$ C $

任何想法?

我需要将csv文件转换为java对象,但是当他们不向我发送最后一列时代码无法正常工作

4 个答案:

答案 0 :(得分:2)

来自docs

  

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样。 结尾的空字符串因此不包含在结果数组中。

答案 1 :(得分:1)

我现在做了这个代码,它对我来说很好,试试这个:

String test = "A,B,,,,,";
    int i;
    int countOfCommas = 0;
    int countOfLetters = 0;
    String[] testArray = test.split("");
    String[] result = test.split(",");

    for(i=0;i<=test.length();i++)
        if(testArray[i].equals(","))
            countOfCommas++;

    for(String s : result){
        System.out.println("$"+s+"$");
    }

    if(test.length() > result.length)
        countOfLetters = test.length()-countOfCommas;

    for(i=0;i<(test.length()-countOfLetters)-result.length;i++)
        System.out.println("$$");

答案 2 :(得分:0)

正如Jeroen Vannevel所说,这是String.split()的记录行为。如果你需要kepp所有空字符串,只需使用test.split(",",-1)

答案 3 :(得分:0)

我有@ZouZou的解决方案,是下一个:

String test = "A,B,,,C,,";

String[] result = test.split(",",test.length()); // or the number of elements you expect in the result

for(String s : result){
    System.out.println("$"+s+"$");
}