1

我正在以这种格式接收数据,这三行中的每一行都是它自己的字符串:

   0 -rw-------    1       167 Tue Nov 13 10:39:28 2012 .bash_history
   0 -rw-r--r--    1        40 Wed Nov 28 12:18:03 2012 aaa.txt
22290 -rw-r--r--    1  22824944 Tue Jan 15 15:05:58 2013 a.bin

我尝试使用此正则表达式将其拆分为由空格分隔的标记。

String[] tokens = newParts[i].split("\\s{1,}");

但是,这始终将第一个标记创建为前两行的空字符串,并将 22290 正确设置为第三行的第一个标记。为什么是这样?所有其余的令牌都是我想要的。只是不是前两行中的第一行,为什么?

4

2 回答 2

1

在拆分字符串之前,您可以 .trim() 删除前导和尾随空格。这应该可以防止不需要的额外令牌。

于 2013-02-05T12:52:35.253 回答
1

引用Pattern.split文档

此方法返回的数组包含输入序列的每个子字符串,这些子字符串由与此模式匹配的另一个子序列终止或在输入序列的末尾终止。

因此,如果您的字符串以分隔符开头,则您的第一个元素将是一个空字符串。同样,如果您的字符串以分隔符结尾,您的最后一个元素将是一个空字符串。

编辑:实际split(string)调用split(string, 0),它明确丢弃尾随的空元素。但它对空的起始元素没有任何作用。

如果您trim()先调用输入,它应该可以按预期工作。

于 2013-02-05T12:54:18.190 回答