1

再次帮助大家,为什么我在使用扫描仪时总是遇到这种错误,即使我确定该文件存在。

java.util.NoSuchElementException:找不到行

我正在尝试a通过使用for循环来计算出现的次数。文本文件包含句子行。同时,我想打印句子的确切格式。

Scanner scanLine = new Scanner(new FileReader("C:/input.txt"));
while (scanLine.nextLine() != null) {
    String textInput = scanLine.nextLine();
    char[] stringArray = textInput.toCharArray();

    for (char c : stringArray) {
        switch (c) {
            case 'a':
            default:
                break;
        }
    }
}
4

3 回答 3

4
while(scanLine.nextLine() != null) {
    String textInput = scanLine.nextLine();
}

我想说问题出在这里:

在您的while情况下,您扫描最后一行并来到 EOF。之后,您进入循环体并尝试获取下一行,但您已经将文件读到了结尾。将循环条件更改为scanLine.hasNextLine()或尝试另一种读取文件的方法。

另一种读取txt文件的方式可以是这样的:

BufferedReader reader = new BufferedReader(new InputStreamReader(new BufferedInputStream(new FileInputStream(new File("text.txt")))));

String line = null;

while ((line = reader.readLine()) != null) {
    // do something with your read line
}
reader.close();

或这个:

byte[] bytes = Files.readAllBytes(Paths.get("text.txt"));
String text = new String(bytes, StandardCharsets.UTF_8);
于 2012-07-16T07:24:43.373 回答
2

您应该在 while 条件下使用:scanner.hasNextLine() 而不是scanner.nextLine()

Scanner 实现了按照这种模式工作的 Iterator 接口:

  • 查看是否有下一项(hasNext())
  • 检索下一项 (next())
于 2012-07-16T07:25:07.953 回答
1

要计算“a”的出现次数或字符串中的任何字符串,您可以使用apache-commons-lang中的 StringUtils,例如:

System.out.println(StringUtils.countMatches(textInput,"a"));

我认为这比将字符串转换为字符数组然后循环整个数组以查找“a”的出现次数更有效。此外,StringUtils 方法是 null 安全的

于 2012-07-16T07:44:15.773 回答