Java 修剪用番石榴隔开的文件

Java 修剪用番石榴隔开的文件,java,parsing,guava,Java,Parsing,Guava,我有以下文件格式: 这是描述部分 列为:bla_英语、bla_德语、eok和“这是说明部分”。前三列只有一个单词。描述可以有多个单词,并且是可选的。使用google guava解析该文件的最佳方法是什么?如果最多有4列,您只需执行以下操作: final String[] columns = input.split("\\s", 4); 发件人: limit参数控制填充图案的次数 应用,因此会影响结果数组的长度。如果 极限n大于零,则模式将应用于 大多数情况下,数组的长度将不大于n,并且 数组的

我有以下文件格式:

这是描述部分


列为:
bla_英语、bla_德语、eok和“这是说明部分”
。前三列只有一个单词。描述可以有多个单词,并且是可选的。使用google guava解析该文件的最佳方法是什么?

如果最多有4列,您只需执行以下操作:

final String[] columns = input.split("\\s", 4);
发件人:

limit参数控制填充图案的次数 应用,因此会影响结果数组的长度。如果 极限n大于零,则模式将应用于 大多数情况下,数组的长度将不大于n,并且 数组的最后一个条目将包含最后一个匹配项之外的所有输入 定界符。如果n为非正,则图案将按如下方式应用 尽可能多次,数组可以有任意长度。如果n为零 然后,阵列将尽可能多次应用该模式 可以有任何长度,尾随的空字符串将被丢弃

如果列数少于
4
列,则
列数。length
只是列数。如果超过
4
列,则在提取第一列
3
后,剩余列将转储到第四列


不需要番石榴。

如果最多有4列,您只需执行以下操作:

final String[] columns = input.split("\\s", 4);
Splitter.on(' ').limit(4).split(input);
发件人:

limit参数控制填充图案的次数 应用,因此会影响结果数组的长度。如果 极限n大于零,则模式将应用于 大多数情况下,数组的长度将不大于n,并且 数组的最后一个条目将包含最后一个匹配项之外的所有输入 定界符。如果n为非正,则图案将按如下方式应用 尽可能多次,数组可以有任意长度。如果n为零 然后,阵列将尽可能多次应用该模式 可以有任何长度,尾随的空字符串将被丢弃

如果列数少于
4
列,则
列数。length
只是列数。如果超过
4
列,则在提取第一列
3
后,剩余列将转储到第四列

不需要番石榴

Splitter.on(' ').limit(4).split(input);
这将使用Guava,您的处理器将很高兴不必处理正则表达式,不像
input.split(“\\s”,4)

如果需要更大的空间匹配,可以使用

Splitter.on(CharMatcher.WHITESPACE).limit(4).split(input);
当然,您也可以创建自己的
CharMatcher

但我真正要做的是在类(静态)或实例(非静态)中定义
拆分器
,然后在其上使用
split
。因此,您只需定义它一次,它将为您的每次呼叫做好准备

class MyClass {
  static Splitter splitter = Splitter.on(CharMatcher.WHITESPACE).limit(4);

  ...

  Iterable<String> slices = splitter.split(input);
}
class-MyClass{
静态拆分器Splitter=Splitter.on(CharMatcher.WHITESPACE).limit(4);
...
Iterable切片=拆分器。拆分(输入);
}
这将使用Guava,您的处理器将很高兴不必处理正则表达式,不像
input.split(“\\s”,4)

如果需要更大的空间匹配,可以使用

Splitter.on(CharMatcher.WHITESPACE).limit(4).split(input);
当然,您也可以创建自己的
CharMatcher

但我真正要做的是在类(静态)或实例(非静态)中定义
拆分器
,然后在其上使用
split
。因此,您只需定义它一次,它将为您的每次呼叫做好准备

class MyClass {
  static Splitter splitter = Splitter.on(CharMatcher.WHITESPACE).limit(4);

  ...

  Iterable<String> slices = splitter.split(input);
}
class-MyClass{
静态拆分器Splitter=Splitter.on(CharMatcher.WHITESPACE).limit(4);
...
Iterable切片=拆分器。拆分(输入);
}

@aphex则输出的
长度
3
。正如我链接和引用的Javadoc非常清楚地说的那样。我已经对我的答案进行了编辑,使其更加清晰。谢谢你的回答。我为不知道拆分的限制选项而感到羞愧。@aphex那么输出的
长度将为
3
。正如我链接和引用的Javadoc非常清楚地说的那样。我已经对我的答案进行了编辑,使其更加清晰。谢谢你的回答。我为不知道拆分的限制选项而感到羞愧。“更广阔的空间意义”让我想起了Guava的Kevin Bourrillion的这个小电子表格:“更广阔的空间意义”让我想起了Guava的Kevin Bourrillion的这个小电子表格: