当前位置: 首页 > 知识库问答 >
问题:

为什么Java8的分裂不产生最后一个令牌[副本]

江飞白
2023-03-14

我希望以下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\u 101。

共有2个答案

卫弘懿
2023-03-14

留档对这种行为很清楚:

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

徐晔
2023-03-14

使用方法的重载版本:

tokens = line.split(",", -1)
 类似资料:
  • 我得到: 在这里,我本来希望得到一个,但不知何故解析成功了,并且在末尾丢失了令牌数据的无效位。 问题是: 然后我进一步钻探,发现令牌#NextToken()抛出了一个异常,文档使它看起来不应该发生这种情况,所以我最终为此提交了一张罚单。

  • 我在这里创建了两个函数,它们几乎100%相同。唯一的区别是函数的regex字符集的顺序不同。为什么这两个函数会产生不同的输出?

  • 问题内容: 我有以下python代码。 我得到以下日志打印输出。 如果我使用split(),btw代替split(’‘),则会得到相同的日志打印输出。 为什么split不将结果分成6个条目的列表?我想问题是涉及到http请求,因为我在gae交互式控制台中的测试获得了预期的结果。 问题答案: 不修改字符串。它返回拆分列表。如果要使用该列表,则需要使用来将其分配给某些内容。

  • 当我在javascript中使用运算符时,为什么最后得到的值是100而不是101?我想知道javascript中运算符的详细信息?

  • 问题内容: 我发布此消息是因为该主题刚刚在另一个问题/答案中提出,并且该行为没有得到很好的记录。 考虑数据框 我想获取由column定义的每个组的第一行和最后一行。 我试过了 但是,这并没有给我我所期望的。 如何获得每个组中的实际第一个和最后一个值? 问题答案: 一种选择是使用该方法: 但是,我还没有找到一种将它们整齐地聚合的方法。当然,总是可以使用构造函数: 注意:我明确使用了该属性,否则您必须

  • 我试图了解是如何工作的,以及拆分器是如何设计的。我认识到可能是更重要的方法之一,但是当我看到一些第三方实现时,有时我看到他们的拆分器无条件地为返回null。 问题: 普通迭代器和无条件返回null的拆分器有何不同?这样的分裂者似乎违背了分裂的目的