【问题标题】:Cannot parseInt on the first line of a file无法在文件的第一行解析 Int
【发布时间】:2019-08-30 11:58:54
【问题描述】:

我有一个简单的文本文件,每一行都有一个数字,然后是一些其他数据,如下所示:

1 somedata someotherdata 
2 randomstuff notimportant

我想要读取文件,并为每一行在数字上使用 parseInt()。我的(简化的)代码:

File file = new File("data.txt");

BufferedReader reader = new BufferedReader(new FileReader(file));

String line;
while ((line = reader.readLine())!= null) {
  String splitLine[] = line.split(" ");
  int number = Integer.parseInt(splitLine[0]);          
  String str1 = splitLine[1];
  String str2 = splitLine[2];
  // do some stuff with the data 
}

这在大多数情况下都有效...除了文件的第一行。阅读第一行并将其拆分完全没有问题。对所有后续行使用 parseInt() 也没有问题。然而,当我尝试 parseInt() 第一行的第一个数字时,我得到一个 NumberFormatException。文本文件本身似乎没有任何问题,每一行的格式都是相同的。为什么会这样?

【问题讨论】:

  • 异常显示什么?它应该显示它试图解析的值,所以你不需要猜测发生了什么。
  • 第一行的splitLine[0] 是什么?
  • 异常显示正确的值。线程“main”java.lang.NumberFormatException 中的异常:对于输入字符串:“1”
  • 您确定没有特殊的不可打印字符吗? (使用调试器)

标签: java


【解决方案1】:

您是否正在使用 Microsoft 软件进行储蓄?有些工具会在文本文件的开头添加有争议的1 "utf-8 BOM"2 序列,Java 没有专门解释。

如果是这种情况,两个明智的行动方案:

  1. 确保文件未与 BOM 一起保存。 (“另存为”对话框中通常有一个选项。)
  2. 检查是否存在 BOM ("\uFEFF"),如果它位于文件第一行的开头,则将其删除。

【讨论】:

  • 我刚刚在 gedit 中创建了一个新的 txt 文件,现在可以使用了。之前我在 LibreOffice 中制作了 txt 文件,所以我猜是罪魁祸首
  • 3.将第一行留空并跳过它... [:-|
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多