2014-01-07 27 views
0

即使字符串長度爲10個字符,我也會收到以下代碼的ArrayIndexOutOfBoundsException。錯誤發生在代碼printedLine.insert(3, '-');的第三行。字符串插入方法不適用於非零索引

public class Program1 { 
    public static void main(String[] args) { 
     int caseNumber, numberOfCases; 
     String currentLine; 
     int lineNumber; 

     Scanner in = new Scanner(System.in); 

     numberOfCases = in.nextInt(); 
     String[] phoneNumbers = new String[numberOfCases + 1]; 

     for (caseNumber = 0; caseNumber <= numberOfCases; caseNumber++) { 
      phoneNumbers[caseNumber] = in.nextLine(); 
     } 

     for (lineNumber = 0; lineNumber < phoneNumbers.length; lineNumber++) { 
      currentLine = phoneNumbers[lineNumber]; 
      currentLine = currentLine.replaceAll("-", ""); 

      if (currentLine.length() > 10) { 
       currentLine = currentLine.substring(0, 10); 
      } 

      System.out.println(currentLine); 

      StringBuffer printedLine = new StringBuffer(currentLine); 
      printedLine.insert(3, '-'); 
      printedLine.insert(7, '-'); 

      System.out.println(printedLine); 
     } 
    } 
} 

有沒有人知道爲什麼會出現這種情況?

更新:如果我只是打印字符串緩衝區對象,所有值與原始字符串,它是10個字符長。

+0

你能不能給我們輸出的'currentLine'請。另外,'printedLine'是一個StringBuffer對象,而不是'String',因爲你的問題似乎表明你的想法。 – thatidiotguy

+0

'currentLine'長度必須少於4個字符。 – rgettman

+2

在'in.nextInt()'之後添加'in.nextLine();'以消耗'「\ n」'。 –

回答

0

您的第一個元素是phoneNumbers中的「」,即phoneNumbers [0]是空字符串。所以它的字符串長度是0,所以你不能做這個插入。

這裏是你的程序修復。

import java.util.Scanner; 

public class Program1 { 
    public static void main(String[] args) { 
     int caseNumber, numberOfCases; 
     String currentLine; 
     int lineNumber; 

     Scanner in = new Scanner(System.in); 

     numberOfCases = Integer.parseInt(in.nextLine()); 
     String[] phoneNumbers = new String[numberOfCases]; 

     for (caseNumber = 0; caseNumber < numberOfCases; caseNumber++) { 
      phoneNumbers[caseNumber] = in.nextLine(); 
     } 

     for (lineNumber = 0; lineNumber < phoneNumbers.length; lineNumber++) { 
      currentLine = phoneNumbers[lineNumber]; 
      currentLine = currentLine.replaceAll("-", ""); 

      if (currentLine.length() > 10) { 
       currentLine = currentLine.substring(0, 10); 
      } 

      System.out.println(currentLine); 

      StringBuffer printedLine = new StringBuffer(currentLine); 
      printedLine.insert(3, '-'); 
      printedLine.insert(7, '-'); 

      System.out.println(printedLine); 
     } 
    } 
} 
2

,試圖消耗更多的令牌時使用in.nextInt();的問題是,它只能讀取int值。

的那一刻進入插入另一個價值,並嘗試使用in.nextLine();它會消耗"\n"輸入鍵「輸入」和你剛纔輸入的值!

有兩種解決方案,以這樣那樣的問題:

numberOfCases = in.nextInt(); 
in.nextLine(); // (It consumes the \n character) 

或者

numberOfCases = Integer.parseInt(in.nextLine()); 
+0

+1用於解釋問題的真正原因。 –

相關問題