2014-01-21 259 views
-6

對於下面的程序我得到異常:字符串索引超出範圍:-2

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -2 
    at java.lang.String.substring(String.java:1911) 
    at Names.main(Names.java:33) 

線路

System.out.println("The character at index 3 in "+middle+" is "+middle.substring(3, 1)); 

你看到這條線的任何問題?

/* Names.java */ 

import java.io.*; 

public class Names { 

/** Performs various string operations on the name John Fitzgerald kennedy. 
*  
* @param arg is not used 
*/ 

    public static void main(String[] args) { 
     String first = "john"; 
     String middle = "Fitzgerald"; 
     String last = "Kennedy"; 
     String initials; 
     String firstInit, middleInit, lastInit; 

     firstInit = first.substring(0, 1); 
     middleInit = middle.substring(0,1); 
     lastInit = last.substring(0,1); 
     initials = firstInit.concat(middleInit); 
     initials = initials.concat(lastInit); 

     System.out.println(); 
     System.out.println(first+" "+middle+" "+last+" "); 
     System.out.println(initials); 
     System.out.println(last+", "+first+" "+middle); 
     System.out.println(last+", "+first+" "+middleInit+"."); 
     System.out.println(first.toUpperCase()+" "+last.toUpperCase()); 

     System.out.println(first+" equals john is "+first.equals("john")); 
     System.out.println(first+" equals john (ignoring case is) "+first.equalsIgnoreCase("john")); 
     System.out.println("The character at index 3 in "+middle+" is "+middle.substring(3, 1)); 
     System.out.println("The index of \"gerald\" within "+middle+" is "+middle.indexOf("gerald")); 
     System.out.println("The index of \"gerald\" within "+last+" is "+last.indexOf("gerald")); 

     System.out.println(); 
    } 

} 
+0

請參閱java文檔。在內容輔助中,它也表示(int beginindex,endindex);.它將如何反向工作,LOK在錯誤-2 –

回答

3

這是行不通的:

middle.substring(3, 1) 

你不能有比你開始值大的終值String#substring()

拋出IndexOutOfBoundsException - 如果beginIndex是負數,或者endIndex大於此String對象的長度,或者beginIndex大於endIndex

由於您只想在指數3的字符,使用charAt()代替:

middle.charAt(3); 

或者,使用substring具有較窄範圍:

middle.substring(3, 4); 
1

你要通過(啓動,結束)參數至substring

middle.substring(3, 4) // '4' since you just want one char 

請記住,substring()將不會返回索引4處的字符。

注: 更簡單的方法來做到這一點將使用charAt(index)

middle.charAt(3) 
1

方法簽名爲

public String substring(int beginIndex, int endIndex) 

所以如果你打算採取一個字符,你應該使用

middle.substring(3, 4); 
0

middle.substring(from index , to index)什麼你在這裏做什麼middle.substring(3, 1)同時使用子to index greater than from index

在Java中

研究字符串操作

0

this documentation甲骨文,很顯然,子串()方法會拋出IndexOutOfBoundsException異常,如果的beginIndex爲負,或endIndex的較大比這個String對象的長度大,或者beginIndex大於endIndex。

相關問題