我希望以下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。
答案 0 :(得分:5)
使用方法的重载版本:
tokens = line.split(",", -1)
答案 1 :(得分:4)
documentation对此行为很清楚:
此方法的工作方式就像通过调用双参数split方法一样 给定的表达式和一个零的限制参数。尾随空 因此,字符串不包含在结果数组中。