检查字符串时出现NoSuchElementException

时间:2015-03-07 21:10:26

标签: java http nosuchelementexception

我目前正在编写一个基本的http服务器。如果协议版本为1.1并且没有主机线,则所需功能之一是显示400错误。

我有以下扫描程序(行是保存请求文件的数组)

  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 个答案:

答案 0 :(得分:2)

如果没有更多令牌,则

next()会抛出NoSuchElementException。因此,您应首先检查是否有更多元素hasNext()

if (scn.hasNext()) {
    variable = scn.next();
}

答案 1 :(得分:2)

正如你所说,可能是“没有主机线”。如何增加警卫?

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