为什么Java 8的拆分不会产生最后一个令牌

时间:2016-09-12 14:20:35

标签: java java-8

我希望以下Java代码将字符串拆分为三个项目:

    String csv = "1,2,";
    String[] tokens = csv.split(",");
    System.out.println(tokens.length);

但是,我只收到两件物品。

我必须承认,我没有对此进行过深入分析,但这对我来说似乎是违反直觉的。 Python和C#都在Python中生成三个项目,如下所示:

def test_split(self):
    line = '1,2,'
    tokens = line.split(",")
    for token in tokens:
        print('-' + token)
-1
-2
-

并在C#中:

   [Test]
    public void t()
    {
        string s = "1,2,";
        var tokens = s.Split(',');
        foreach (var token in tokens)
        {
            Console.WriteLine("-" + token);
        }
    }
-1
-2
-

我错过了什么?

这是Java 1.8.0_101。

2 个答案:

答案 0 :(得分:5)

使用方法的重载版本:

tokens = line.split(",", -1)

答案 1 :(得分:4)

documentation对此行为很清楚:

  

此方法的工作方式就像通过调用双参数split方法一样   给定的表达式和一个零的限制参数。尾随空   因此,字符串不包含在结果数组中。