如何解决在Java中以换行作为输入
我想如果输入是换行符,那么它将随机化字母中的字符。 这是我的代码:
while(!((specialChar >= 65 && specialChar <= 90) || (specialChar >= 97 && specialChar <= 122))) {
System.out.print("Apa karakter spesial untuk hari ini? (Kosongkan untuk menggunakan karakter acak): ");
specialChar = sc.nextLine().charAt(0);
if(specialChar >= 65 && specialChar <= 90 || specialChar >= 97 && specialChar <= 122) {
System.out.println("Karakter spesial hari ini adalah " + specialChar);
break;
}
else if(specialChar == 10) {
char c = (char)(randomizer.nextInt(26) + 'A');
System.out.println("Karakter spesial hari ini adalah " + specialChar);
}
System.out.println("Karakter harus merupakan alfabet!");
}
但是结果为indexoutofbounds:0。如果我使用.next(),那么它将不会读取新行,对吗?我很困惑。
解决方法
这:如果sc.nextLine().charAt(0);
返回一个空字符串,sc.nextLine()
将失败,并产生确切的异常。
原因是使用扫描仪有点不幸。永远不要使用nextLine-如果将nextLine与其他next方法混合使用,扫描仪将失败,并且我假设您在某个地方致电.nextInt()
或类似的电话,因此扫描仪处于混乱状态*。
相反,如果您的目的是读取输入,直到按回车键(相对于默认行为,即读取直到空格),只需告诉扫描仪您希望换行符成为定界符即可:
Scanner s = new Scanner(...);
s.useDelimiter("\r?\n");
然后,使用next()
读取字符串,使用nextInt()
等读取数字。
*)对于认为“嘿”的任何评论者或投票者,只需调用nextLine()一次,然后扔掉结果以删除换行符-不,如果输入是用空格分隔的,那将不起作用。而更新定界符并使用.next()
来读取行则没有这样的警告。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。