2013-10-24 62 views
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 
. 

但是當我按第二句,我得到錯誤,我的程序崩潰後進入,我不能像這樣輸入:

Hi 
My name is jack 

this is message 

. 

謝謝

回答

2

當您鍵入只輸入掃描儀返回一個空字符串。當您嘗試獲取空字符串的第一個字符text.charAt(0)時,您將超出範圍並引發StringIndexOutOfBoundsException。

速戰速決將使用的charAt前檢查字符串的長度如下:

if (text.length() > 0 && text.charAt(0) != '.') 
+0

我仍然得到錯誤,當我按下輸入,我可以這樣鍵入: – raymond

+0

嗨,我的名字是傑克然後空行,然後這是結束然後。 – raymond

+0

你在兩個不同的地方訪問charAt(0),你是否糾正了它們兩個? – kviiri

0

添加簡單的長度檢查,並繼續當0

1

的問題是,對於一個空字符串,沒有第0個字符,所以text.charAt(0)失敗。

取而代之,您可以使用text.startsWith(".")來測試第一個字符(或前幾個字符)和text.isEmpty()以測試空輸入,即用戶在沒有先寫入任何文本的情況下進入輸入時。

此外,由於您的第二個if條件恰恰是第一個的否定,因此您可以在此處使用else