2014-01-21 240 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。

相关问题