【问题标题】:Reading a tab-separated file in Java在 Java 中读取制表符分隔的文件
【发布时间】:2012-12-30 23:07:03
【问题描述】:

我有以下代码可以读取 Java 中的制表符分隔文件:

while ((str = in.readLine()) != null) {
  if (str.trim().length() == 0) {
          continue;
  }

  String[] values = str.split("\\t");

  System.out.println("Printing file content:");
  System.out.println("First field" + values[0] + "Next field" +  values[1]);
}

但它打印的是 1 而不是文件内容。这里有什么问题? 示例文件中的一行内容如下:

{Amy Grant}{/m/0n8vzn2}{...}

【问题讨论】:

  • 你要拆分的字符串文本是什么?
  • 周围有很多 TSV 和 CSV 解析器库 - 我强烈建议您使用其中之一,而不是自己滚动。
  • 试试System.out.println(Arrays.asList(values));
  • @EshaGhosh 你确定,文件是制表符分隔的吗?
  • @EshaGhosh 你能告诉我们标签在哪里使用原始问题吗?它们不会出现在评论中。

标签: java csv file-io


【解决方案1】:

试试System.out.println(Arrays.asList(values));

这行得通!但我需要单独访问这些字段。你能告诉我我的代码有什么问题吗?

我怀疑您收到的是IndexOutOfBoundsException。您遇到的错误很重要,如果忽略它,您将无法解决问题。

这意味着您只有一个字段集。

String[] values = str.split("\\t", -1); // don't truncate empty fields

System.out.println("Printing file content:");
System.out.println("First field" + values[0] + 
   (values.length > 1 ? ", Next field" +  values[1] : " there is no second field"));

【讨论】:

  • 非常感谢。 不要截断空白字段对我帮助很大。
【解决方案2】:

写\t 而不是\\t。这将是您想要的更多

String[] values = str.split("\t");

我在一些项目中使用http://sourceforge.net/projects/opencsv/,它可以很好地完成工作。

【讨论】:

  • 它们不是等价的吗? \\ 不会解析为 \ 给您留下 \t 吗?
  • 这意味着在\t这两个字符上分开而不是在标签上。
  • "\" 是一个错误。 "\t" 是一个特殊字符,TAB。 "\\t" 是 "\t",但不是制表符。
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2020-06-18
相关资源
最近更新 更多