【发布时间】:2020-09-10 05:18:46
【问题描述】:
我有一个文件,上面有一些字符串。此文件中的每个组都有两个 ID,我想我可以将这些组与这些 ID 行所在的位置分开。我创建了一个方法来检查字符串是否以数字字符开头。然后我将这些字符串的索引号保存在 @ 987654321@.
现在我想从这些数据中创建具有这些 ID 的对象,以及一个包含这些字符串组的数组列表。 示例文件格式:
1 4
str1
str2
2 11
str3
str4
str5
5 7
str6
str7
str8
7 90
str9
我试图让它工作的代码
@Override
public void readFile(String path) {
try {
Scanner scanner = new Scanner(new File(path));
ArrayList<String> temporaryArray = new ArrayList<>();
ArrayList<Integer> integers = new ArrayList<>();
while (scanner.hasNextLine()) {
temporaryArray.add(scanner.nextLine());
}
for (String string : temporaryArray) {
if (ifExistOnArray(string.charAt(0))) {
integers.add(temporaryArray.indexOf(string));
}
}
for (int i = 0; i < integers.size(); i++) {
String[] numline = temporaryArray.get(integers.get(i)).split("\t");
int firstID = Integer.parseInt(numline[0]);
int secondID = Integer.parseInt(numline[1]);
ArrayList<String> objectLines = new ArrayList<>();
for (int j = integers.get(i); j < integers.get(i+1) - 1; j++) {
objectLines.add(temporaryArray.get(j+1));
}
Admission admission = new Admission(firstID, secondID, objectLines);
IOOperations.admissionArrayList.add(admission);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
以及我用于检查行是否以数字开头的方法。
public boolean ifExistOnArray(char ch) {
char[] chars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
boolean found = false;
for (char iterate : chars) {
if(ch == iterate) {
found = true;
break;
}
}
return found;
}
代码在for (int j = integers.get(i); j < integers.get(i+1); j++) { 行中给出了IndexOutOfBoundsException,我理解它为什么这样做,但我想不出任何解决方案来使它工作。我应该怎么做才能使这段代码工作?
【问题讨论】:
-
user19281 - 有更新吗?
-
@ArvindKumarAvinash 您好,感谢您的回答。在我最初的想法中,整数数组将存储以数字开头的行的索引。并且temporaryArray 将存储所有行,并且在循环中我将操作对象的创建,但是在看到Christian Bongiorno 的回答后,我认为使用LinkedHashMap 可能是一个更好的主意。但是感谢您指出使用 \\s+ 和 isDigit 我现在正在使用它们。