java - 在 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;
}
}
解决方案
一旦单词以 'ie' 或 'ei' 开头,input.charAt(indexIE - 1)
就会产生错误,因为indexIE
那时是 0。
我不确定您想在代码中做什么,但需要进行某种检查
if (indexIE == 0) {
} else {
//current code
}
推荐阅读
- c++ - SDL_LockTexture 返回黑色像素
- sql - Oracle - SQL query to bin the data from one table to another based on a column value?
- python - 创建图像拼接的邻接矩阵
- google-cloud-platform - BIGQUERY csv 文件加载带有默认值的附加列
- database - 在 WooCommerce 到 Magento 之间转移数据库
- html - 格式化时保持多行属性 with Vetur
I have VSCodium
1.51.1
and Vetur extensionv0.30.3
and I work with.vue
files. I configured Vetur to be the default formatter forvue
files:- python - Could Python decode JSON in parallel threads?
- python - Pandas python multiple export read text files
- java - How To Drag A TextView To EditText And Append TextView Text To EditText On Drop?
- reactjs - .map 函数未在反应 js 中呈现所有数据