Java 如何解析文本文件/需要在switch语句中使用第一个字符
我需要使用分隔符“:”解析文本文件 文本文件如下所示: a:29173:He:James:474937:2:4:1 t:27184:She:Susan:474930:6:4:2 c:28174:He:Meg:474931:5:4:1 她:罗宾:474947:4:4:4 我的第一个问题是如何解析switch语句中使用的第一个字符? 我在想下面的代码(我把它放在一起…但我很确定这是不正确的) 我知道我可以读取第一个字符&我知道我可以使用带有字符的switch语句,但是我一直在研究如何将这两个字符组合在一起Java 如何解析文本文件/需要在switch语句中使用第一个字符,java,parsing,if-statement,switch-statement,Java,Parsing,If Statement,Switch Statement,我需要使用分隔符“:”解析文本文件 文本文件如下所示: a:29173:He:James:474937:2:4:1 t:27184:She:Susan:474930:6:4:2 c:28174:He:Meg:474931:5:4:1 她:罗宾:474947:4:4:4 我的第一个问题是如何解析switch语句中使用的第一个字符? 我在想下面的代码(我把它放在一起…但我很确定这是不正确的) 我知道我可以读取第一个字符&我知道我可以使用带有字符的switch语句,但是我一直在研究如何将这两个字符组合
File file = new File("test.txt");
// Read the file
try {
Scanner scanner = new Scanner(file).useDelimiter(":");
String line = scanner.nextLine();
while (scanner.hasNextLine())
{
line = line.trim();
int index;
String type;
String name;
String identifier = scanner.next();
switch(line.charAt(0)) {
case 'p':
index = scanner.nextInt();
name = scanner.next();
break;
case 'c':
index = scanner.nextInt();
type = scanner.next();
name = scanner.next();
int partyC = scanner.nextInt();
int empathyC = scanner.nextInt();
int carryingCapacityC = scanner.nextInt();
break;
case 't':
index = scanner.nextInt();
type = scanner.next();
int creatureT = scanner.nextInt();
int weightT = scanner.nextInt();
int valueT = scanner.nextInt();
break;
case 'a':
index = scanner.nextInt();
type = scanner.next();
int creatureA = scanner.nextInt();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
VS
好的,我已经读过了,并且玩过一些,我认为我可以使用if-else循环。然而,我得到了一些错误(在代码下面)
错误:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at SorcerersCave.main(SorcerersCave.java:33)
我想你可以一行一行地读文件。获取要切换的第一个字符,如下所示:
switch(line.charAt(0)) {
case 'a':
//...
case 'p':
//...
//...
}
使用提供字符串数组的String[]parts=line.split(“:”)
,而不是使用分隔符并执行.next()
。并修剪每个元素,对于整数,使用Integer.parseInt(parts[index].trim())
另外,您不需要while(scanner.hasNext())
。取而代之的是
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
//split
//switch
如果您知道什么不起作用,则更容易提供帮助:)编译错误?感谢您提供的信息和建议!我按照你的建议换了箱子&真管用!我同时也改变了这一点——这同样有效。我仍然对分隔符有点困惑。。。我会继续努力。分隔符适用于next(),但nextLine()和split在您的情况下更好。
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
//split
//switch