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();
}