无法使charAt(0)起作用

时间:2012-04-30 11:22:07

标签: java string if-statement java.util.scanner

好的,所以我似乎无法让这个工作,虽然很多人告诉我语法和逻辑是正确的。谁能告诉我我可能做错了什么?

public Scanner in = new Scanner(System.in);

public void movePlayer() {
    System.out.print("move: ");
    String str = in.nextLine();

    in.nextLine();

    char c = str.charAt(0);

    if (c == 'l' || c == 'L') {
        player.moveLeft();
    }
 }

该程序被捕获到char c = str.charAt(0);

我正在返回此错误:

java.lang.StringIndexOutOfBoundsException: 字符串索引超出范围:0(在java.lang.String中)

7 个答案:

答案 0 :(得分:5)

您没有通过控制台输入任何内容,因此str为空。这就是chatAt(0)抛出异常的原因

答案 1 :(得分:3)

您不想使用nextLine()。您想使用next()

String str = in.next();

这是nextLine()

的Javadoc
  

使此扫描程序超过当前行并返回跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。该位置设置为下一行的开头。

您想要next()代替:

  

查找并返回此扫描仪的下一个完整令牌。在完成令牌之前和之后是与分隔符模式匹配的输入。即使之前的hasNext()调用返回true,此方法也可能在等待输入扫描时阻塞。

这将阻止您消耗空行并引发异常。

答案 2 :(得分:0)

这意味着str为空。您应该检查它是否不是null而不是空的。

if (str != null && !str.isEmpty()) {
...
}

答案 3 :(得分:0)

多数民众赞成...因为当你试图将char置于第0位时,它会抛出一个异常,因为大小为f的数组为0。

可能是因为获取I/O from the Command Line

而阅读此内容

答案 4 :(得分:0)

添加对空字符串和空值的检查。你会避免很多麻烦。

答案 5 :(得分:0)

如果您在控制台中按Enter键,Scanner将被视为完整的一行,无论是否输入了文字。

在行的开头按Enter键,将字符串""返回到方法Scanner.nextLine()

str.lenght () > 0之前添加str.charAt(0)支票。

答案 6 :(得分:0)

改为使用in.next()。出于某种原因,nextLine()有时无法与CharAt()一起使用。