我在这个格式中接收数据,这三行中的每一行都是它自己的字符串:
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作为第三行的第一个标记。为什么是这样?所有剩余的令牌都是我想要的。只是不是前两行中的第一行,为什么?
答案 0 :(得分:1)
在拆分字符串之前,你可以.trim()来删除前导和尾随空格。这应该可以防止不必要的额外令牌。
答案 1 :(得分:1)
引用Pattern.split
documentation:
此方法返回的数组包含输入序列的每个子字符串,该子字符串由与此模式匹配的另一个子序列终止,或者由输入序列的末尾终止。
因此,如果您的字符串以分隔符开头,那么您的第一个元素将是一个空字符串。同样,如果你的字符串以分隔符结尾,那么你的最后一个元素将是一个空字符串。
修改:实际上split(string)
调用split(string, 0)
,它会明确地丢弃尾随的空元素。但它对空的起始元素没有任何作用。
如果您先在输入上调用trim()
,它应该可以正常工作。