【发布时间】:2013-07-08 14:20:46
【问题描述】:
我正在尝试编写一个程序来读取文本文件并将文本文件中的一行(例如 B 行)附加到上一行 A 行,如果 B 行包含字符串“&”。这是我的代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
public class Inputs {
public static void main(String[] args) {
File file = new File("C:\\Users\\frencke\\workspace\\Testing Stuff\\Append Tetsing\\file3.txt");
ArrayList<String> lines = new ArrayList<String>();
ArrayList<Integer> num = new ArrayList<Integer>();
ArrayList<Integer> num2 = new ArrayList<Integer>();
try {
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
lines.add(scanner.nextLine());
String delimiter = " &";
for(int i=0; i<lines.size(); i++) {
if(lines.get(i).contains(delimiter))
num.add(i);
}
for(int i=1; i<=lines.size()+1; i++)
if(num.get(i-1) != num.get(i)){
num2.add(num.get(i));
System.out.println(lines.get(num2.get(i)));
}
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("Cannot find file.");
}
}
}
我收到了错误
线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引:1,大小:1 在 java.util.ArrayList.RangeCheck(未知来源) 在 java.util.ArrayList.get(未知来源) 在 Inputs.main(Inputs.java:21)
第 21 行,
if(num.get(i-1) != num.get(i)){
我认为这是因为我从 i 中减去 1,但我不确定为什么这是一个问题,因为我将 i 初始化为 1 而不是 0 以避免这种情况。 任何帮助,将不胜感激;我也尝试过 StringBuffer .append() 方法,但没有成功,但如果你有一个可以使用该方法或其他方法的解决方案,那将是花花公子。
【问题讨论】:
-
1) 对代码块使用一致且符合逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。 2) 始终复制/粘贴错误和异常输出。 3) 请对代码、输入/输出和结构化文档(如 HTML 或 XML)使用代码格式。
-
您不能简单地从数组中的另一个索引开始。数组总是从 0 开始。你可以在其他地方使用
i-1来补偿偏移量。 -
顺便说一句:如果您试图在只有一个位置(或如它所说的大小 1)进入位置 0 的数组中获得“i-1”(即 0)和“i”(即 1)没问题,但第二次访问位置 1 会给你 outOfBoundsException。
-
@AndrewThompson,我修正了缩进并引用了错误。
-
@KBorja,为什么我的数组大小只有 1?
标签: java if-statement append concatenation