2017-01-11 3 views
0

В основном я пытаюсь взять String в качестве входа через класс Scanner.Невозможно обработать входной файл с помощью сканера

public class test { 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 
     String line = new String(); 
     for(int t=0;t<10;t++) 
     { 

      if(sc.hasNextLine()) line = sc.nextLine(); 
      System.out.println(line); 
     } 
    } 

} 

Использование входов

ama 
asd 
asd 
asd 
fds 
fdgd 
asd 
ghfg 
dfs 
ghfh 

, что я замечаю, когда я пишу на вход по одному на консоли я получаю правильный вывод. Но когда я вставляю входные данные, я не получаю последний вывод.

Как преодолеть такую ​​ситуацию.

В основном требуется ввод, а затем вывод 10-го входа.

Примечание: Это связано с проблемами кодека. Ввод будет дан полностью и не вводится один за другим.

+1

Думаю, я понимаю, какова ваша проблема сейчас. Причина, по которой последний вход не обрабатывается, состоит в том, что ему не хватает нового символа строки, который у остальных есть. По сути, вы эмулируете нажатие Enter, потому что после каждого входа (кроме последнего) есть скрытый новый символ строки (в среде Unix: \ n, Windows, я считаю, это: \ r). Если вы должны скопировать свой вход в текстовый файл и перейти к последнему входу и нажать «Возврат», а затем скопировать все, включая пустую строку внизу в консоль, он должен забрать ваш последний вход. – CraigR8806

+0

на самом деле я не могу изменить входной файл, я могу только поместить свой код на этот сайт, и они будут проверять вывод, проверяя их входные файлы. –

ответ

0

Вы можете сказать Сканеру использовать разделитель. Но имейте в виду, что вы получаете только следующий фрагмент данных, когда после него появляется разделитель. Вот почему вы не получаете последний выход.

Так что, когда вы используете ...

Scanner sc = new Scanner(System.in); 
sc.useDelimiter(" "); 
String line = new String(); 

for(int t=0;t<10;t++){ 
    if(sc.hasNext()) line = sc.next(); 
    System.out.println(line); 
} 

... с один вход "ama asd asd asd fds fdgd asd fghfg dfs ghfh " (обратите внимание на пробел в конце), он должен работать.

+0

входной файл немного отличается. Извините за ошибку. И я не тот, кто решит, какой будет выход –

+0

@ManojitPaul Я вижу. Но без получения разделителя (будь то новая строка или пробел или что-то еще) сканер не будет знать, когда он должен выводить данные. Если вы используете .nextLine(), разделитель является символом новой строки (Enter нажато). Линия заканчивается этим. Если этого не хватает, сканер считает, что линия еще не завершена. – mumpitz

+0

есть ли лучший способ ввода ввода таким образом –

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