如何获取一个带有名称和两个值的字符串,并将其分成一个包含名称的字符串和两个包含值的双精度值?
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)
.
这会自动满足名称中任意数量的单词。
我编写了一个 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)
.
这会自动满足名称中任意数量的单词。