用番石榴修剪空间分隔文件

时间:2014-04-15 09:09:50

标签: java parsing guava

我有以下文件格式:

  

bla_english bla_german eok这是描述部分

列是:bla_english, bla_german, eok and "This is the description part"。前三列只有一个字。描述可能包含多个单词,并且是可选的。使用google guava解析该文件的最佳方法是什么?

2 个答案:

答案 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);
}