我是编码的新手,我正尝试跟着培训视频一起学习。我已经按照步骤操作,但是无法读取保存到项目文件夹中的文件。任何帮助将不胜感激。
returns totalNumOfPoints
答案 0 :(得分:1)
您使用了错误的扫描器方法来使用分隔符将数据读取为标记。
next()
查找并返回此扫描器的下一个完整令牌。在完整令牌之前,然后是与定界符模式匹配的输入
nextLine()
将此扫描仪前进到当前行并返回跳过的输入。此方法返回当前行的其余部分,但不包括末尾的任何行分隔符。
因此nextLine()不考虑定界符。在您的情况下,代码String second = scLine.nextLine();
不会被评估,因为该行已被使用。
使用next()
代替nextLine()
。应该可以。
答案 1 :(得分:1)
您的问题是如何使用扫描仪。您正在使用String line = scFile.nextLine();
从文件中读取一行,这很好。然后,您尝试使用另一个Scanner
实例将元素从行中分离出来,这通常也是个好主意,但是您的问题在以下代码段中:
Scanner scLine = new Scanner(line).useDelimiter("#");
String first = scLine.nextLine();
String second = scLine.nextLine();
您正在创建Scanner的新实例,并更改其定界符以将元素与line
值分开。但是您随后两次调用nextLine()
,但是nextLine()
没有使用您指定的分隔符。
让我们检查一下implementation of nextLine()
(来自OpenJDK Java 8):
public String nextLine() {
...
String result = findWithinHorizon(linePattern, 0);
if (result == null)
throw new NoSuchElementException("No line found");
...
}
使用的模式是linePattern
,它来自linePattern()
method。该方法返回hard-coded pattern "\r\n|[\n\r\u2028\u2029\u0085]
而不是您指定的分隔符。
您需要改用方法Scanner#next()
,该方法使用定界符读取 next 令牌。令牌是包围在定界符中的数据部分。
因此您的代码应为:
Scanner scLine = new Scanner(line).useDelimiter("#");
String first = scLine.next();
String second = scLine.next();