2015-04-02 2 views
0

Я сканирование текста в программу, используя класс сканера, и каждую строку текстового файла является бронированием формыИспользование сканера для поиска конца строки?

(id) (month) (date) (numdays) (type1) (number1) (type2) (number2) . . . 

Первый четыре элемента данных бронирований являются всегда одинаковым количеством т.е. 4, но данные типа (типа) и (числа) могут иметь любое количество аргументов, поэтому я хочу обнаружить конец строки , есть ли способ сделать это со сканером класса?

Я хочу найти конец строки, чтобы мой код не читал Следующая строка - продолжение бронирования.

} еще если (input.equals ("Заказ")) {

   int bookingId=inputStream.nextInt(); 
       System.out.printf("%d ",bookingId); 
       String month = inputStream.next(); 
       System.out.printf("%s ", month); 
       int date = inputStream.nextInt(); 
       System.out.printf("%d ", date); 
       int numDays= inputStream.nextInt(); 
       System.out.printf("%d ", numDays); 


       while(!(inputStream.findInLine("\n").equals("\n"))){ 
        String nextType = inputStream.next(); 
        System.out.printf("%s ",nextType); 
        int nextCapacity= inputStream.nextInt(); 
        System.out.printf("%d ", nextCapacity); 
        Map<String, Integer> requests=new HashMap<String, Integer>(); 
        requests.put(nextType,nextCapacity); 

       } 
+0

Предоставьте свой код. – Pratik

+2

Ya .. 'Scanner.next()' имеет перегруженный метод, который принимает «шаблон» в качестве аргумента. Если вы покажете нам свой вклад, мы можем показать вам правильное направление :) – TheLostMind

+0

Кроме того, что вы хотите точно? .. Почему вы хотите завершить линию? .. – TheLostMind

ответ

0

вы можете проверить EOL:

charAt(i)!='\n' && charAt(i+1)!='\r' 

или вы можете просто прочитать всю строку в то время, :

Scanner sc = new Scanner(file); 

line = sc.nextLine(); 
0

Основываясь на вашем коде, я предлагаю использовать два сканера: один для чтения целых строк и один для чтения символов в линия. Таким образом, первый сканер позаботится об EOL. Код будет выглядеть так:

Scanner sc = new Scanner(new File("input")); 

while(sc.hasNextLine()) { 
    Scanner scLine = new Scanner(sc.nextLine()); 

    int bookingId=scLine.nextInt(); 
    String month = scLine.next(); 
    int date = scLine.nextInt(); 
    int numDays= scLine.nextInt(); 

    System.out.printf("%d %s %d %d ", bookingId, month, date, numDays); 

    Map<String, Integer> requests=new HashMap<>(); 
    while(scLine.hasNext()) { 
     String type = scLine.next(); 
     int capacity= scLine.nextInt(); 
     requests.put(type, capacity); 

     System.out.printf("%s %d", type, capacity); 
    } 

    System.out.println(); 
} 
+0

Спасибо, что мой парсер хорошо выполняет свою работу, однако я получаю сообщение об ошибке «Исключение в потоке» main «java.util.NoSuchElementException» Вам нужно закрыть сканер или некоторые такие? – Massin

+0

Нет. Проблема, скорее всего, во входном файле. Вы пытаетесь прочитать элемент, когда его нет. Либо строка меньше 4 символов, таких как '(id) (месяц) (дата)' или у вас есть непарный тип и число, например '(id) (месяц) (дата) (numdays) (type1) (number1) (type2) ' –

+0

Я могу получить все случаи, чтобы читать правильно, а затем распечатать их для входного файла, вот почему я думал, что это может быть связано с получением входного файла? – Massin