字符串错误。java.lang.StringIndexOutOfBoundsException(java)
对不起我的英语。一个字符一个字符地读取文件,您需要找到文件中的单词。一切似乎都正常,但有一个错误java.lang.StringIndexOutOfBoundsException最有可能发生在这里int-endWord=wordToFind.length();但是这个错误显示了IU需要什么。如果输入wordToFind.length()-1,则错误消失。但是输出不是我需要的字符串错误。java.lang.StringIndexOutOfBoundsException(java),java,arrays,string,Java,Arrays,String,对不起我的英语。一个字符一个字符地读取文件,您需要找到文件中的单词。一切似乎都正常,但有一个错误java.lang.StringIndexOutOfBoundsException最有可能发生在这里int-endWord=wordToFind.length();但是这个错误显示了IU需要什么。如果输入wordToFind.length()-1,则错误消失。但是输出不是我需要的 private static String wordToFind = "one"; //word what i need
private static String wordToFind = "one"; //word what i need find
public static void main(String[] args) throws FileNotFoundException, IOException{
int endWord = wordToFind.length(); //size word, maby this error
int startWord = 0;
String myWord = ""; // this value create word
char[] barray = new char[1024]; //byte array
try(BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("t.txt")))){ //read t.txt
int value;
while((value = reader.read(barray, 0, barray.length)) != -1) {
for(int i = 0; i < value; i++){
//check character
if(wordToFind.charAt(startWord) == barray[i]){
startWord++;
if(startWord > endWord){
startWord = 0;
myWord = "";
}else{
myWord += barray[i];
}
if(startWord == endWord){
System.out.println(myWord);
}
}
}
}
}catch(Exception e){
System.out.println("Error : "+e);
}
}
私有静态字符串wordToFind=“one”//我需要找到什么
公共静态void main(字符串[]args)抛出FileNotFoundException、IOException{
int endWord=wordToFind.length();//可能是由于以下错误导致的单词大小
int startWord=0;
字符串myWord=”“;//此值用于创建单词
char[]baray=new char[1024];//字节数组
try(BufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream(“t.txt”)){//read t.txt
int值;
while((value=reader.read(barray,0,barray.length))!=-1){
for(int i=0;i结束字){
startWord=0;
myWord=“”;
}否则{
myWord+=barray[i];
}
if(startWord==结束字){
System.out.println(myWord);
}
}
}
}
}捕获(例外e){
System.out.println(“错误:+e”);
}
}
错误:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围
范围:3
这些错误大多是由循环造成的。它告诉您字符串太大,无法放入数组。或者您正在尝试读取不存在的字符/字符串。字符串具有(由)一个字符数组,该数组在内部将“one”的值保存为
值[]={o',n',e'}
数组索引从0开始,一直到n-1,所以您可以查询0到2之间的值。现在,在您的代码中有:
for(int i = 0; i < value; i++) {
if(wordToFind.charAt(startWord) == barray[i]){
startWord++;
if(startWord > endWord) {
现在对于i as 3,您正试图从(字符串)数组中访问第三个元素,该数组正在字符串中使用(该数组不存在),因此您将得到异常
所以你应该改变你的状况
if(startWord > endWord) {
致:
endWord
是单词的长度,但charAt(int)
是以零为基础的。这意味着您可以访问的最高索引是length-1。所以如果你说
String str = "abcd";
char ch = str.charAt(str.length());
这将引发异常,因为str.length()
返回4,而索引的范围是0到3
因此,在代码中,当您选中
startWord>endWord
时,应该是startWord>=endWord
。如果该检查成功,则startWord
不能再用作索引,应重置。按照目前的情况,代码将一直运行,直到startWord
等于endWord
,这意味着它太高,无法用作索引,因此它将引发异常。异常是从
wordToFind.charAt(startWord)
因为startword等于wordToFind.length()。如果你看一下,你会发现这将是一个例外
我还删除了try-catch块,以便您可以看到异常发生的位置和整个异常堆栈跟踪
此行将修复异常:
如果(startWord>=结束字){
我还修改了逻辑以打印我们找到的单词,以便按照我的修改修复异常
这是您的代码修复:
private static String wordToFind = "mi6"; //word what i need find
public static void main(String[] args) throws FileNotFoundException, IOException {
int endWord = wordToFind.length(); //size word, maby this error
int startWord = 0;
String myWord = ""; // this value create word
char[] barray = new char[1024]; //byte array
System.out.println("searching:"+wordToFind);
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("/home/bpgergo/Workspace/mi6-REST_API/handover/README.md"))); //read t.txt
int value;
while((value = reader.read(barray, 0, barray.length)) != -1) {
for(int i = 0; i < value; i++) {
if(wordToFind.charAt(startWord) == barray[i]){
startWord++;
myWord += barray[i];
if(startWord >= endWord) {
System.out.println("Bingo:"+myWord);
startWord = 0;
myWord = "";
}
}
}
}
}
private static String wordToFind=“mi6”//word我需要找到什么
公共静态void main(字符串[]args)抛出FileNotFoundException、IOException{
int endWord=wordToFind.length();//可能是由于以下错误导致的单词大小
int startWord=0;
字符串myWord=”“;//此值用于创建单词
char[]baray=new char[1024];//字节数组
System.out.println(“搜索:+wordToFind”);
BufferedReader=新的BufferedReader(新的InputStreamReader(新文件InputStream(“/home/bpgergo/Workspace/mi6-REST_API/handover/README.md”));//读取t.txt
int值;
while((value=reader.read(barray,0,barray.length))!=-1){
for(int i=0;i=结束字){
System.out.println(“宾果:+myWord”);
startWord=0;
myWord=“”;
}
}
}
}
}
“最有可能”还不够好。请确切地告诉我们它发生在哪里。另外,请发布“t.txt”文件的内容。非常感谢您的详细解释!如果我更改if(startWord>=endWord)
则无输出删除这些行if(startWord==endWord){System.out.println(myWord);}
并将其添加到现有的if条件if(startWord>=endWord){if(startWord==endWord){System.out.println(myWord);}startWord=0;
wordToFind.charAt(startWord)
private static String wordToFind = "mi6"; //word what i need find
public static void main(String[] args) throws FileNotFoundException, IOException {
int endWord = wordToFind.length(); //size word, maby this error
int startWord = 0;
String myWord = ""; // this value create word
char[] barray = new char[1024]; //byte array
System.out.println("searching:"+wordToFind);
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("/home/bpgergo/Workspace/mi6-REST_API/handover/README.md"))); //read t.txt
int value;
while((value = reader.read(barray, 0, barray.length)) != -1) {
for(int i = 0; i < value; i++) {
if(wordToFind.charAt(startWord) == barray[i]){
startWord++;
myWord += barray[i];
if(startWord >= endWord) {
System.out.println("Bingo:"+myWord);
startWord = 0;
myWord = "";
}
}
}
}
}