扫描仪读取到错误数据,文本文件格式为:
111,Smith,Sam, 40,10.50 330,Jones,Jennifer,30,10.00
The program is:
public class P3 {
public static void main(String[] args) {
String file=args[0];
File fileName = new File(file);
try {
Scanner sc = new Scanner(fileName).useDelimiter(", ");
while (sc.hasNextLine()) {
if (sc.hasNextInt( ) ){ int id = sc.nextInt();}
String lastName = sc.next();
String firstName = sc.next();
if (sc.hasNextInt( ) ){ int hours = sc.nextInt(); }
if (sc.hasNextFloat()){ float payRate=sc.nextFloat(); }
System.out.println(firstName);
}
sc.close();
} catch(FileNotFoundException e) {
System.out.println("Can't open file "
+ fileName + " ");
}
}
}
输出为:
40,10.50
330,Jones,Jennifer,30,10.00
应该是:
Sam
Jennifer
如何修复它?
最佳答案
问题在于您的数据不仅仅由逗号分隔。它也由行结束符和 Unicode character U+FF0C 分隔。 (全角逗号)。
我拿走了你的代码,替换了该行
Scanner sc = new Scanner(fileName).useDelimiter(", ");
与
Scanner sc = new Scanner(fileName, "UTF-8").useDelimiter(", |\r\n|\n|\uff0c");
然后运行它。它产生了预期的输出。
文本 , |\r\n|\n|\uff0c
是匹配以下任一内容的正则表达式:
- 逗号后跟空格,
- 回车符 (
\r
) 后跟换行符 (\n
), - 单独的换行符,
- Unicode 全角逗号 (
\uff0c
)。
这些是我们想要用来分隔文本的字符。我已经指定了两种类型的行结束符,因为我不确定您的文件使用哪种行结束符。
我还将扫描仪设置为在读取文件时使用 UTF-8 编码。我不知道这是否会对您产生影响,但在我的系统上 UTF-8 不是默认编码,因此我需要指定它。
关于java - 为什么我的程序无法正确识别姓氏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32426892/