读取.text文件并卡在第一个char上

时间:2012-01-31 21:11:12

标签: java equals java.util.scanner

我有一个看起来像这样的文本文件:

  

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.

所以它正在读取文件,但是卡在第一个字符上。此外,使一切都成为'标识符'。有任何想法吗?我一直盯着这个太久了!

5 个答案:

答案 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"

http://www.java-samples.com/showtutorial.php?tutorialid=221

答案 3 :(得分:2)

正如其他人所指出的那样,您需要使用.equals()代替==来检查字符串。另一件事是你使用":"作为分隔符,这意味着代币将包含空格。例如,第一个标识符为"p "而不是"p"。您可以使用.trim()方法删除任何尾随空格,然后使用.equals()进行比较,如下所示:

if (identifier.trim().equals("p")) {

您还需要将代码放在循环中以读取整个文件。您可以将其括在while循环中,直到scanner抛出NoSuchElementException,这表示您已阅读整个文件。

参考here

答案 4 :(得分:1)

您不能使用==来比较Java中的字符串(不是您想要的方式)。