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”异常。
答案 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)
public int indexOf(String str)
返回第一次出现的字符串中的索引 指定子字符串。
返回的索引是最小值k,其中:
this.startsWith(str, k)
如果不存在这样的k值,则返回-1。
因此,您需要在代码中处理-1
值。
i = strf.indexOf(" ");
if (i > -1) {
//code here
}