我在我的代码中收到此错误" java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1" ,我将如何解决这个问题?

时间:2015-04-17 10:38:06

标签: java indexoutofboundsexception

    int i;
    boolean flag = false;
    String str;
    String sub;
    String strf;
    try
    {

        str = jTextField1.getText();
        FileReader fr = new FileReader("D:\\dictionary.txt");
        BufferedReader bb = new BufferedReader(fr);

        while((strf = bb.readLine()) != null)
        {
            //System.out.println(strf);
            i = strf.indexOf("  ");
            sub = strf.substring(0,i);
            if(str.equalsIgnoreCase(sub))
            {
                jTextArea2.setText(strf.substring(i+1,strf.length()));                  
                flag=true;
                break;
            }

        }
        bb.close();

        if(!flag)
            System.out.println("Word not found");

    }catch(Exception e)
    {
        System.out.println(e);
    }

在字典文本文件中搜索单词的含义时,我从头开始搜索某些单词时收到“java.lang.StringIndexOutOfBoundsException:String index out of range:-1”异常。

5 个答案:

答案 0 :(得分:4)

如果indexof未在字符串中找到指定的字符串(strf),则会得到索引-1:

        //System.out.println(strf);
        i = strf.indexOf("  "); // returns -1
        sub = strf.substring(0,i);

因此,在调用子字符串之前,您必须检查i是否更大-1

        //System.out.println(strf);
        i = strf.indexOf("  ");
        if (i>-1) {
         sub = strf.substring(0,i);
         .....
        }

答案 1 :(得分:0)

你的问题在这一行:

 i = strf.indexOf("  ");

如果你的字符串中没有2个连续的空格,我将是-1然后你正在调用strf.substring(0,i);,这将给出错误。打印字符串并检查" "是否存在。

答案 2 :(得分:0)

您应该检查strf.indexOf(" ")是否大于-1。看一下String文档:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java.lang.String)

答案 3 :(得分:0)

看一下这个链接 - http://developer.android.com/reference/java/lang/String.html#indexOf(int)

如果你找不到字符串,你将获得-1。

将代码修改为

if (i != -1){ 
  sub = strf.substring(0,i);
        if(str.equalsIgnoreCase(sub))
        {
            jTextArea2.setText(strf.substring(i+1,strf.length()));                  
            flag=true;
            break;
        }

答案 4 :(得分:0)

indexOf的

Documentation表示

public int indexOf(String str)
     

返回第一次出现的字符串中的索引   指定子字符串。

     

返回的索引是最小值k,其中:

 this.startsWith(str, k)
     

如果不存在这样的k值,则返回-1。

因此,您需要在代码中处理-1值。

i = strf.indexOf("  ");
if (i > -1) {
    //code here
}