Что мне написать вместо оператора scan.skip()?

    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));

    int q = scanner.nextInt();
   scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

Какая польза от этого skip() метода?

Могу ли я заменить его другим методом, чтобы получить тот же результат?


person Jetal mali    schedule 24.09.2018    source источник
comment
Ваш текущий код не будет скомпилирован, так как он не содержит объявления сканера. Но пропуск разделителя строк является одним из решений проблемы, описанной в Сканер пропускает nextLine() после использования next() или nextFoo()?   -  person Pshemo    schedule 24.09.2018
comment
Какая польза от вышеприведенного метода .skip()? Прочтите javadoc: skip(String pattern). --- Можно ли заменить другим методом, чтобы получить тот же результат? Не знаю, почему вы просите другой метод, делающий то же самое, так сложно ответить, но javadoc показывает пример: skip(Pattern.compile("\\R?")).   -  person Andreas    schedule 24.09.2018
comment
Если вы хотите пропустить пробелы, останавливаясь после любой новой строки, попробуйте этот ответ: stackoverflow.com/a/42471816/7098259   -  person Patrick Parker    schedule 24.09.2018


Ответы (1)


Давайте прочитаем документы для skip:

Пропускает ввод, соответствующий шаблону, созданному из указанной строки.

Таким образом, skip говорит сканеру не читать некоторые части пользовательского ввода и продолжать после этих частей. Здесь ваш шаблон соответствует символу новой строки Windows \r\n или одному из этих...

  • U + 2028 РАЗДЕЛИТЕЛЬ ЛИНИИ
  • U + 2029 РАЗДЕЛИТЕЛЬ ПУНКТОВ
  • U + 0085 СЛЕДУЮЩАЯ СТРОКА (НЕЛ)

...если такой шаблон существует.

Почему программист это пишет? Возможное объяснение состоит в том, чтобы следующий вызов nextLine не возвращал пустую строку. См. этот вопрос, почему это происходит.

Могу ли я заменить другим методом, чтобы получить тот же результат?

Вы могли бы вызвать skip(Pattern.compile("...")), но на самом деле это просто еще одна перегрузка того же метода. Ближе всего к тому, что вы делаете, вероятно, nextLine, который использует шаблон, аналогичный вашему.

person Sweeper    schedule 24.09.2018