0

你能帮我吗?我有这个代码,它是我程序的一部分:

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

.

谢谢你

4

3 回答 3

2

当您键入时,仅输入扫描仪返回一个空字符串。当您尝试使用 获取空字符串的第一个字符时text.charAt(0),您会超出范围并抛出 StringIndexOutOfBoundsException。

一个快速的解决方法是在使用 charAt 之前检查字符串的长度,如下所示:

if (text.length() > 0 && text.charAt(0) != '.')
于 2013-10-24T12:37:41.283 回答
1

问题是对于空字符串,没有第 0 个字符,因此text.charAt(0)失败。

相反,您可以使用它text.startsWith(".")来测试第一个字符(或前几个字符),并text.isEmpty()测试空输入,即当用户在没有先写任何文本的情况下按 Enter 时。

此外,由于您的第二个if条件正好是第一个的否定,您可以在else这里使用。

于 2013-10-24T12:41:16.397 回答
0

添加简单的长度检查,如果为 0 则继续

于 2013-10-24T12:37:49.230 回答