再次帮助大家,为什么我在使用扫描仪时总会遇到这种错误,即使我确定该文件存在。
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;
}
}
}
答案 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接口,该接口按此模式工作:
答案 2 :(得分:1)
要计算字符串中“a”或任何字符串的出现次数,您可以使用apache-commons-lang中的StringUtils,如:
System.out.println(StringUtils.countMatches(textInput,"a"));
我认为将字符串转换为字符数组然后遍历整个数组以查找“a”的出现次数会更有效。而且,StringUtils方法是null安全的