如何获取一个带有名称和两个值的字符串,并将其分成一个包含名称的字符串和两个包含值的双精度值?

How can I take a String with a name and two values and separate it into a String containing the name and 2 doubles containing the values?

我编写了一个 class 用于帮助管理排球队名单的程序。名单包含在.dat文件中,球员如下:

Rachael Adams 3.36 1.93

当我尝试将此字符串分成正确的数据类型(名称是字符串,然后第一个和第二个值是统计数据的双精度值)时,我的问题出现了。

public Roster(String filename) {
    players = new ArrayList<Player>();
    
    try {
        FileReader fr = new FileReader(filename);
        BufferedReader inFile = new BufferedReader (fr);
        
        String line = inFile.readLine();
        Scanner scan = new Scanner(line);
        
        while(line != null) {
            String firstName = scan.next();
            String lastName = scan.next();
            double attackStat = scan.nextDouble();
            double blockStat = scan.nextDouble();
            String name = firstName + " " + lastName;
            Player newPlayer = new Player(name, attackStat, blockStat);
            players.add(newPlayer);
            line = inFile.readLine();
        }
        scan.close();
        inFile.close();
        
    } catch (IOException e) {
        System.out.println(e);
    }
}

创建名册对象时程序抛出此异常

Exception in thread "main" java.util.InputMismatchException
        at java.base/java.util.Scanner.throwFor(Scanner.java:939)
        at java.base/java.util.Scanner.next(Scanner.java:1594)
        at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
        at Roster.<init>(Roster.java:30)
        at Assignment08.openRosterFile(Assignment08.java:59)
        at Assignment08.main(Assignment08.java:18)

我是 Java 的新手,仍然面临学习曲线,所以如果需要更多信息,请告诉我。

如果可能的话,我将不胜感激对我做错了什么的解释,而不仅仅是一个解决方案。非常感谢。

我总是觉得分割线更容易:

String[] columns = line.split(" (?=\d)";
String name = columns[0];
double attackStat = Double.parseDouble(columns[1]);
double blockStat =  Double.parseDouble(columns[2]);

这通过在 space 上拆分来工作,但仅当下一个字符是数字时通过 向前看 (?=\d).

这会自动满足名称中任意数量的单词。