Чтение .txt файла и застревание на первом символе - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть текстовый файл, который выглядит примерно так:

p: 10001: Unity

c: 20007: ведьма: Моргана: 10001: 10: 15: 0

т: 30001: золото: 20004: 50: 2000

а: 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 ]

3 голосов
/ 01 февраля 2012

Идентификатор является строкой.Вы не можете использовать ==, чтобы проверить значение строки.== проверит, являются ли два объекта одинаковыми, а они нет.Один объект является строковой переменной;другой объект является константой.Использование метода .equals() проверит значение строки.

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

Если вы хотите охватить обстоятельства, в которые могут быть включены пробелы, вы также можете сделать:

if( identifier.startsWith("p"))
2 голосов
/ 01 февраля 2012

Как уже отмечали другие, вам нужно использовать .equals() вместо == для проверки строк.Другое дело, что вы используете ":" в качестве разделителя, что означает, что токены будут содержать пробелы.Например, первый идентификатор будет "p " вместо "p".Вы можете использовать метод .trim(), чтобы удалить любые конечные пробелы, а затем использовать .equals() для сравнения следующим образом:

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

Вам также нужно поместить свой код в цикл, чтобы прочитать весь файл.Вы можете заключить его в цикл while, пока ваш scanner не выдаст NoSuchElementException, что будет означать, что вы прочитали весь файл.

Ссылка здесь .

2 голосов
/ 01 февраля 2012

Используйте "p".equals(identifier) вместо identifier == "p".

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

2 голосов
/ 01 февраля 2012

Вы не должны сравнивать строки, используя ==, но вместо этого используйте .equals (), например

"wantedvalue".equals(variable)

или

variable1.equals(variable2)

Методы равенства проверяют, равны ли они в том смысле, что они выглядят одинаково, в то время как == проверяет, являются ли они действительно одним и тем же объектом. Сравните с взятием двух одинаковых ручек. Они выглядят одинаково (равно), но они не одинаковые ручки (==).

1 голос
/ 01 февраля 2012

Вы не можете использовать == для сравнения строк в Java (не так, как вы планировали).

...