Regex / String.split无法按预期工作

时间:2013-02-05 12:45:00

标签: java android regex

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

   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作为第三行的第一个标记。为什么是这样?所有剩余的令牌都是我想要的。只是不是前两行中的第一行,为什么?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

引用Pattern.split documentation

  

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

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

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

如果您先在输入上调用trim(),它应该可以正常工作。