【问题标题】:Scanner int and String扫描仪 int 和 String
【发布时间】:2018-05-07 21:29:15
【问题描述】:

我有一个 txt 文件需要读入程序。 文件中内容的格式是这样的:

1, Q, 0
1, S, 4
1, E, 3
1, W, 2
1, N, 5
2, Q, 0
2, N, 5
3, Q, 0

下面的代码不起作用:

sc = new Scanner(new FileReader("dirFile.txt"));
            while(sc.hasNextLine()){
                sc.useDelimiter(", ");
                int loc = sc.nextInt();
                sc.skip(sc.delimiter());
                String description = sc.next();
                sc.skip(sc.delimiter());
                int locID = sc.nextInt();                   // Line 70
                sc.nextLine();                              // Line 71
                locations.get(loc).addExits(description, locID);
            }

但如果我将第 70 行和第 71 行更改为下面的代码,它可以工作:

        String temp = sc.nextLine();
        int locID = Integer.parseInt(temp);

我猜第一个代码的问题是扫描仪读取整数有问题。如果我让扫描仪将其读取为字符串,然后将其解析为 int,就可以了。但我不确定为什么第一个代码不起作用。这对我来说没有意义。谁能告诉我第一个代码有什么问题?

【问题讨论】:

  • Scanner 返回由分隔符分隔的标记,因此您无需跳过分隔符。但是,您不应该为此使用Scanner(这不是该工作的正确工具,而且速度很慢)。使用BufferedReader 读取行,并使用split(", ") 读取每一行。

标签: java io java.util.scanner


【解决方案1】:

您的文本由, 和换行符\n 组成。您必须将它们结合起来。

此外,该设置应设置在 while 循环之外:

sc = new Scanner(new FileReader("dirFile.txt"));
sc.useDelimiter(", |\\n");
while() {
  ///
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多