Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串错误。java.lang.StringIndexOutOfBoundsException(java)_Java_Arrays_String - Fatal编程技术网

字符串错误。java.lang.StringIndexOutOfBoundsException(java)

字符串错误。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

对不起我的英语。一个字符一个字符地读取文件,您需要找到文件中的单词。一切似乎都正常,但有一个错误java.lang.StringIndexOutOfBoundsException最有可能发生在这里int-endWord=wordToFind.length();但是这个错误显示了IU需要什么。如果输入wordToFind.length()-1,则错误消失。但是输出不是我需要的

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 = "";
                } 
            }
        }
    }
}