Scanner a5 = new Scanner(System.in);
while(a5.hasNextLine()) //store every line in mail message until user type "." on a seperate line
{
String text = a5.nextLine();
if (text.charAt(0) != '.')
{txt.add(text);}
else if(text.charAt(0) == '.' )
{break;}
}
我希望用户输入一条消息,直到他没有输入“。”在一个单独的行中,他可以添加更多行。但我的问题是,当我按下回车时,我收到此错误:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: 0
at java.lang.String.charAt(Unknown Source)
at MyPMC.main(MyPMC.java:51)
如何修复它,以便在我的字符串中添加空行? 例: 当我在消息中键入它时,它可以正常工作:
Hi
my name is jack
.
但是当我在第二句后按Enter键时出现错误并导致程序崩溃,我不能这样输入:
Hi
My name is jack
this is message
.
谢谢
答案 0 :(得分:2)
当您只键入时,输入Scanner会返回一个空字符串。当您尝试使用text.charAt(0)
获取空String的第一个字符时,您将超出范围并抛出StringIndexOutOfBoundsException。
快速解决方法是在使用charAt之前检查String的长度,如下所示:
if (text.length() > 0 && text.charAt(0) != '.')
答案 1 :(得分:1)
问题是对于空字符串,没有第0个字符,因此text.charAt(0)
失败。
相反,您可以使用text.startsWith(".")
来测试第一个字符(或前几个字符),并使用text.isEmpty()
来测试空输入,即当用户点击输入而不编写任何文本时第一
此外,由于您的第二个if
条件完全取决于第一个else
,因此您可以在此使用{{1}}。
答案 2 :(得分:0)
添加简单长度检查并在0
时继续