gpt4 book ai didi

java - (Java) 扫描仪未从文件中读取 nextDouble()

转载 作者:行者123 更新时间:2023-12-02 07:53:50 26 4
gpt4 key购买 nike

我是 Java 新手,我正在尝试使用扫描仪从文本文件中读取一些数据。扫描器可以很好地读取字符串和整数数据成员,但是当它达到 double 时,它会抛出 InputMismatchException。

文本文件的格式如下所示...

姓氏,名字,0,0.0
史密斯,约翰,10,2.456
琼斯,威廉,15,3.568

这是我的代码...

import java.io.FileNotFoundException;
import java.util.Scanner;
import java.io.File;

public class Student {

int age;
double gpa;
String firstName;
String lastName;

public static void main (String[] args) {
int iNum = 0;
double dNum = 0.0;
String str1 = "";
String str2 = "";
List<Student> listOfObjects = new ArrayList<>();

try {
Scanner src = new Scanner(new
File("data.txt")).useDelimiter(",|\r\n|\n");

while (src.hasNext()) {
str1 = src.next(); //last name
str2 = src.next(); //first name
iNum = src.nextInt(); //age
dNum = src.nextDouble(); /* gpa - having trouble reading these doubles with Scanner */

Student object = new Student(str1, str2, iNum, dNum);
listOfObjects.add(object); //add new object to list

}
}
catch (FileNotFoundException e) {
e.printStackTrace();
}

for (Student a: listOfObjects) // printing the sorted list
System.out.print(a.getStudentLastName() + ", " +
a.getStudentFirstName() +
", " + a.getStudentAge() + ", " + a.getStudentGpa() + "\n");
}

public Student(String str1, String str2, int iNum, double dNum){
this.lastName = str1;
this.firstName = str2;
this.age = iNum;
this.gpa = dNum;
}

public String getStudentFirstName() {
return firstName;
}

public String getStudentLastName() {
return lastName;
}

public int getStudentAge() {
return age;
}

public double getStudentGpa() {
return gpa;
}

我尝试将区域设置设置为美国,并尝试弄乱分隔符,但似乎没有任何效果。

最佳答案

非常感谢@Sotirios指出我对问题的错误结束。您的问题是由于扫描仪中使用了不正确的图案引起的。根据您向我们展示的输入文件的片段,每个逗号后面有空格。因此,您应该使用以下模式来反射(reflect)这一点:

,\\s*|\r\n|\n
^^^^^ match a comma, followed by zero or more spaces

当我在本地测试时,我什至没有达到double值,在读取第三个位置整数时它崩溃了。尝试以下代码:

Scanner src = new Scanner(new File("data.txt")).useDelimiter(",\\s*|\r\n|\n");
while (src.hasNext()) {
str1 = src.next();
str2 = src.next();
iNum = src.nextInt();
dNum = src.nextDouble();

Student object = new Student(str1, str2, iNum, dNum);
listOfObjects.add(object); //add new object to list
}

前两个字符串通过的原因是逗号后面的空格被卷入下一个字符串。但你不能用数字来解决这个问题,在这种情况下,多余的空格无处可去,最终会出现你不断看到的 InputMismatchException

关于java - (Java) 扫描仪未从文件中读取 nextDouble(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42060498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com