NoSuchElementException при проверке строки

В настоящее время я пишу простой http-сервер. Одной из необходимых функций является отображение ошибки 400, если версия протокола 1.1 и отсутствует строка Host.

У меня есть следующий сканер, который (строки это массив, который содержит файл запроса)

  Scanner scn = new Scanner(lines[0]);
  String command = scn.next();
  String fileName = scn.next();
  String protocol  = scn.next();
  Scanner scn2 = new Scanner(lines[1]);
  String host  = scn2.next();
  String hostline = scn2.next();

а затем у меня есть следующий оператор if, который должен проверить, является ли hostline пустым

if ( protocol.equals("HTTP/1.1") && hostline.isEmpty() ) {
String reply="HTTP/1.0 400 Bad Request\r\n" +
             "Connection: close\r\n" +
             "Content-Type: " + contentType + "\r\n" +
             datestr +
             "<h1>HTTP/1.0 400 Bad Request</h1>\r\n";
outs.write(reply.getBytes()); }

Когда я запускаю его и тестирую, я получаю NoSuchElementException в этой строке:

String hostline = scn2.next();

2 ответа

Решение

Как вы сказали, может быть, что "нет линии Host". Как насчет добавления охраны?

String hostline = scn2.hasNext() ? scn2.next() : ""

next() бросает NoSuchElementException если токенов больше нет. Таким образом, вы должны сначала проверить, есть ли еще элементы с hasNext()

if (scn.hasNext()) {
    variable = scn.next();
}
Другие вопросы по тегам