2012-01-29 1 views
2

мне нужно разобрать текстовый файл, используя разделитель «:»Как разобрать текстовый файл/нужно первый символ для использования в переключатель заявлении

Текстовый файл выглядит следующим образом:

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

т: 27184: Она: Susan: 474930: 6: 4: 2

с: 28174: Он: Meg: 474931: 5: 4: 1

p: 29190: Она: Робин: 474947 : 4: 4: 4

Мой первый вопрос: как я могу разобрать первый символ для использования в инструкции switch? Я думал о чем-то вроде кода ниже (который я собрал вместе ... но я уверен, что это неверно).

Я знаю, что могу прочитать первый символ & Я знаю, что могу использовать оператор switch с char (s), но я застрял в том, как свести их вместе.

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) 
+0

Легче помочь, если вы сообщите, что не работает :) Ошибка компиляции? –

ответ

1

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

switch(line.charAt(0)) { 

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

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

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

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

Спасибо за информацию и предложения! Я изменил случаи, когда вы предложили & это работает! Я также изменил время, которое тоже работает. Я все еще немного запутался в разделителе, хотя ... Я буду продолжать работать над этим. – tommy1370

+0

Разделитель применяется для next(), но nextLine() и split лучше в вашем случае. –

Смежные вопросы