没有找到行异常

时间:2012-07-16 07:22:33

标签: java java.util.scanner

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

  

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;
        }
    }
}

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

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

Scanner实现了Iterator接口,该接口按此模式工作:

  • 查看是否有下一个项目(hasNext())
  • 检索下一个项目(next())

答案 2 :(得分:1)

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

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

我认为将字符串转换为字符数组然后遍历整个数组以查找“a”的出现次数会更有效。而且,StringUtils方法是null安全的