我有一个看起来像这样的文本文件:
p:10001:Unity
c:20007:Witch:Morgana:10001:10:15:0
t:30001:黄金:20004:50:2000
a:40002:魔杖:20006
我想使用“:”作为分隔符,并根据第一个字符是什么来处理每一行。
try {
Scanner scanner = new Scanner(chooser.getSelectedFile()).useDelimiter(":");
int index;
String type;
String name;
String identifier = scanner.next();
if (identifier == "p") {
index = scanner.nextInt();
name = scanner.next();
partyList.add(new Party(index, name));
} else if (identifier == "c") {
index = scanner.nextInt();
type = scanner.next();
name = scanner.next();
int partyC = scanner.nextInt();
int empathyC = scanner.nextInt();
double carryingCapacityC = scanner.nextDouble();
creatureList.add(new Creature(index, type, name, partyC, empathyC,carryingCapacityC));
} else if (identifier == "t") {
index = scanner.nextInt();
type = scanner.next();
int creatureT = scanner.nextInt();
double weightT = scanner.nextDouble();
int valueT = scanner.nextInt();
treasureList.add(new Treasure(index, type, creatureT, weightT, valueT));
} else if (identifier == "a") {
index = scanner.nextInt();
type = scanner.next();
int creatureA = scanner.nextInt();
artifactList.add(new Artifact(index, type, creatureA));
} else {
System.out.println("This is not a valid line of input");
}
System.out.println("Identifier: " + identifier);
} catch (IOException e) {
e.printStackTrace();
}
这应该不会太难......但是,当我运行程序时,我会得到类似的结果:
You chose to open this file: testFileSC.txt
This is not a valid line of input
Identifier: p
This is not a valid line of input
Identifier: 10002
//etc. (you get the point) all the way through my text file.
所以它正在读取文件,但是卡在第一个字符上。此外,使一切都成为'标识符'。有任何想法吗?我一直盯着这个太久了!
答案 0 :(得分:3)
标识符是一个字符串。您不能使用==来检查字符串的值。 ==将检查两个对象是否相同,它们不是。一个对象是字符串变量;另一个对象是常量。使用.equals()
方法将检查String的值。
if( identifier.equals("p"))
...
如果您想涵盖可能包含空格的情况,您也可以这样做:
if( identifier.startsWith("p"))
答案 1 :(得分:2)
您不应该使用==来比较字符串,而是使用.equals(),例如
"wantedvalue".equals(variable)
或
variable1.equals(variable2)
等于方法测试,如果它们在相同的意义上是相同的,而==检查它们是否是实际相同的对象。比较两个相同的笔。它们看起来相同(等于),但它们不是相同的笔(==)。
答案 2 :(得分:2)
使用"p".equals(identifier)
代替identifier == "p"
。
答案 3 :(得分:2)
正如其他人所指出的那样,您需要使用.equals()
代替==
来检查字符串。另一件事是你使用":"
作为分隔符,这意味着代币将包含空格。例如,第一个标识符为"p "
而不是"p"
。您可以使用.trim()
方法删除任何尾随空格,然后使用.equals()
进行比较,如下所示:
if (identifier.trim().equals("p")) {
您还需要将代码放在循环中以读取整个文件。您可以将其括在while循环中,直到scanner
抛出NoSuchElementException
,这表示您已阅读整个文件。
参考here。
答案 4 :(得分:1)
您不能使用==来比较Java中的字符串(不是您想要的方式)。