首页 > 解决方案 > 在 Java 中读取文本文件时出现 CharAt 索引错误

问题描述

当我遍历整个 enable1 txt 文件 ( https://raw.githubusercontent.com/dolph/dictionary/master/enable1.txt ) 以检查它是否符合“E 之前的 I 除了 C 之后”时,我遇到了一些令人困惑的错误" 英文单词'规则'。我注意到当我从下面加星标的 charAt(indexEI - 1) (****) 中删除“-1”时,代码成功了。

任何想法为什么会这样?错误只是在迭代的“e”部分中看似随机的位置显示“at java.lang.String.charAt (String.java: 658)”、“Main.ibeforeE”和“at Main.main”。然后它说 var\cache\executor-snippets\run.xml:53: Java returned: 1 BUILD FAILED 最后。

我对 Java 还是很陌生,因此也欢迎任何其他建设性的批评。谢谢!

主要的:

import java.util.Scanner;
import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

    EnableWord test = new EnableWord();
    test.EnableWords();


    Scanner read = new Scanner(System.in);
    ArrayList<String> list = new ArrayList<String>();
    list = test.getList();


    int x = 0;
    int falseCounter = 0;

    while (x < list.size()) {
        System.out.print(list.get(x) + ": ");

        String input = list.get(x);

        if (input.equals("x")) {
            break;
        } else {
            System.out.println(iBeforeE(input));
                if(!iBeforeE(input)) {
                    falseCounter++;
                }
            x++;
        }
    }

    System.out.println(falseCounter);
}

public static boolean iBeforeE(String input) {


    if (!input.contains("ie") && !input.contains("ei")) {
        return true;
    }

    if (input.contains("ie")) {
        int indexIE = input.indexOf("ie");
        Character searchIE = input.charAt(indexIE - 1);
        if (!searchIE.toString().equals("c")) {
            return true;
        }

    } else if (input.contains("ei")) {
        int indexEI = input.indexOf("ei");
        ****Character searchEI = input.charAt(indexEI - 1);****
        if (searchEI.toString().equals("c")) {
            return true;
        }
    }


    return false;

}

类 EnableWord:

}


import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

public class EnableWord {

private ArrayList<String> list;
private Scanner s;
private File file;

public EnableWord() {
}

public void EnableWords() {

    try {
        this.s = new Scanner(this.file = new File("enable1.txt"));
    } catch (FileNotFoundException ex) {
        Logger.getLogger(EnableWord.class.getName()).log(Level.SEVERE, null, ex);
    }
    this.list = new ArrayList<>();
    while (s.hasNext()) {
        list.add(s.next());
    }
    s.close();

}

public void printWords() {

    for (String word : list) {
        System.out.println(word);
    }

}

public ArrayList<String> getList() {

    ArrayList<String> newList = new ArrayList<String>();

    for (String word : list) {
        newList.add(word);

    }
    return list;
}

}

标签: javaindexofcharat

解决方案


一旦单词以 'ie' 或 'ei' 开头,input.charAt(indexIE - 1)就会产生错误,因为indexIE那时是 0。

我不确定您想在代码中做什么,但需要进行某种检查

if (indexIE == 0) {

} else {
    //current code
}

推荐阅读