嗨我寫了一個Java代碼來查找由其他字組成的最長的單詞。我的邏輯是從文本文件中讀取單詞列表,並將每個單詞添加到數組中(在文本中,單詞是排序的,每行只會有一個單詞)之後,我們檢查數組中的每個元素是否其他元素作爲子字符串。如果是這樣,我們計算子串的數量。具有最多子字符串的元素將成爲結果java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍
代碼正在運行時,我給一個文本文件只有兩個字。但是,當有兩個以上的字我收到以下錯誤
java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:3
我覺得錯誤是在這行,如果(s.charAt(I1存在的)== w.charAt(J1))
import java.util.*;
import java.io.*;
import java.lang.reflect.Array;
public class Parser
{
public static void main (String[] args) throws IOException
{
String [] addyArray = null;
FileReader inFile = new FileReader ("sample.txt");
BufferedReader in = new BufferedReader (inFile);
String line = "";
int a = 0;
int size=0;
String smallestelement = "";
while(in.ready())
{
line=in.readLine();
while (line != null && line != "\n")
{
size++;
System.out.println(size);
line = in.readLine();
if (line == null) line = "\n";
}
}
addyArray = new String[size];
FileReader inFile2 = new FileReader ("sample.txt");
BufferedReader in2 = new BufferedReader (inFile2);
String line2 = "";
while(in2.ready())
{
line2 = in2.readLine();
while (line2 != null && line2 != "\n")
{
addyArray[a] = line2;
System.out.println("Array"+addyArray[a]);
line2 = in.readLine();
a++;
if (line2 == null) line2 = "\n";
}
}
int numberofsubstrings=0;
int[] substringarray= new int[size];
int count=0,no=0;
for(int i=0;i<size;i++)
{
System.out.println("sentence "+addyArray[i]);
for(int j=0;j<size;j++)
{
System.out.println("word "+addyArray[j]);
String w,s;
s=addyArray[i].trim();
w=addyArray[j].trim();
try{
for(int i1=0;i1<s.length();i1++)
{
if(s.equals(w)&& s.indexOf(addyArray[j-1].trim()) == -1)
{}
else
{
if(s.charAt(i1)==w.charAt(0))
{
for(int j1=0;j1<w.length();j1++,i1++)
{
if(s.charAt(i1)==w.charAt(j1)) //I feel the error is occuring here
{ count=count+1;}
if(count==w.length())
{no=no+1;count=0;};
}
}
}
}
System.out.println(no);
}
catch(Exception e){System.out.println(e);}
substringarray[i]=no;
no=0;
}
}
for(int i=0;i<size;i++)
{
System.out.println("Substring array"+substringarray[i]);
}
Arrays.sort(substringarray);
int max=substringarray[0];
System.out.println("Final result is"+addyArray[max]+size);
}
}
是的,每次做charAt檢查都可以解決問題,只會在問題上提出一個繃帶。這不是問題的根本原因。因此,我不會推薦使用該解決方案。這也可能導致代碼後面的其他問題。 – 2012-02-09 23:09:50
嗯,並不意味着每一次迭代。猜猜我必須編輯 – Alfabravo 2012-02-09 23:11:01