我有以下文件格式:
bla_english bla_german eok这是描述部分
列是:bla_english, bla_german, eok and "This is the description part"
。前三列只有一个字。描述可能包含多个单词,并且是可选的。使用google guava解析该文件的最佳方法是什么?
答案 0 :(得分:2)
如果最多有4列,那么您可以这样做:
final String[] columns = input.split("\\s", 4);
来自the Javadoc:
limit参数控制模式的次数 应用因此会影响结果数组的长度。如果 限制n大于零,那么模式将应用于 大多数n - 1次,数组的长度不会大于n,并且 数组的最后一个条目将包含除最后一个匹配之外的所有输入 分隔符。如果n是非正数,那么该模式将被应用为 尽可能多次,阵列可以有任何长度。如果n为零 那么模式将尽可能多地应用于数组 可以有任何长度,尾随空字符串将被丢弃。
如果您的列数少于4
,那么columns.length
将只是列数。如果您有超过4
列,那么在提取第一个3
后,其余部分将被转储到第四列。
不需要番石榴。
答案 1 :(得分:2)
Splitter.on(' ').limit(4).split(input);
这使用了Guava,与input.split("\\s", 4)
不同,您的处理器很乐意不必处理正则表达式。
如果您需要更广泛的空间匹配,可以使用
Splitter.on(CharMatcher.WHITESPACE).limit(4).split(input);
或者您可以创建自己的CharMatcher
。
但我真正做的是在我的类(静态)或实例(非静态)中定义Splitter
,然后在其上使用split
。所以你只需要定义一次它就可以为你的每次通话做好准备了!
class MyClass {
static Splitter splitter = Splitter.on(CharMatcher.WHITESPACE).limit(4);
...
Iterable<String> slices = splitter.split(input);
}