如何在这个字符串数组中添加enter?

时间:2013-10-24 12:33:28

标签: java arrays string

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

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

.

谢谢

3 个答案:

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

时继续