Как разобрать текстовый файл / нужен первый символ для использования в операторе switch - PullRequest
2 голосов
/ 29 января 2012

Мне нужно проанализировать текстовый файл, используя разделитель ":"

Текстовый файл выглядит так:

a: 29173: Он: Джеймс: 474937: 2: 4: 1

т: 27184: Она: Сьюзен: 474930: 6: 4: 2

с: 28174: он: Мег: 474931: 5: 4: 1

р: 29190: Она: Робин: 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. Тем не менее, я получаю ряд ошибок (ниже кода).

        File file = new File("test.txt");

    // Read the file
    try {
        Scanner scanner = new Scanner(file).useDelimiter(":");

        while (scanner.hasNextLine())
        {

            String line = scanner.nextLine();
            line = line.trim();

            int index;
            String type;
            String name; 
            char identifier = line.charAt(0);

            if (identifier == 'p') {
                index = scanner.nextInt();
                name = scanner.next();  

            } else if (identifier == 'c') {
                index = scanner.nextInt();
                type = scanner.next();
                name = scanner.next();
                int partyC = scanner.nextInt();
                int empathyC = scanner.nextInt();
                int carryingCapacityC = scanner.nextInt();

            } else if (identifier == 't') {
                index = scanner.nextInt();
                type = scanner.next();
                int creatureT = scanner.nextInt();
                int weightT = scanner.nextInt();
                int valueT = scanner.nextInt();

            } else if (identifier == 'a') {
                index = scanner.nextInt();
                type = scanner.next();
                int creatureA = scanner.nextInt();

            } else {
                System.out.println("This is not a valid line of input");
            } System.out.println("Identifier: " + identifier);
        } 

    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

Ошибка:

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)

1 Ответ

1 голос
/ 29 января 2012

Я думаю, вы можете просто прочитать файл построчно. Получите первый символ для переключения следующим образом:

switch(line.charAt(0)) {

    case 'a':
        //...
    case 'p':
       //...
    //...
}

И вместо использования разделителя и выполнения .next(), используйте String[] parts = line.split(":"), который дает вам массив строк. И обрежьте каждый элемент, а для целых используйте Integer.parseInt(parts[index].trim()).

Кроме того, вам не нужно while (scanner.hasNext()). Вместо этого

while (scanner.hasNextLine()) {
    String line = scanner.nextLine();
    //split
    //switch
...