-1

我正在尝试编写一个程序来读取文本文件并将文本文件中的一行(例如 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(Unknown Source) at java.util.ArrayList.get(Unknown Source) at Inputs.main(Inputs.爪哇:21)

在第 21 行,

if(num.get(i-1) != num.get(i)){

我认为这是因为我从 i 中减去 1,但我不确定为什么这是一个问题,因为我将 i 初始化为 1 而不是 0 以避免这种情况。任何帮助,将不胜感激; 我也尝试过 StringBuffer .append() 方法,但没有成功,但如果你有一个可以使用该方法或其他方式的解决方案,那将是花花公子。

4

3 回答 3

0

我在这个网站上的其他问题和其他一些网站上的一些东西的帮助下解决了这个问题。我基本上重新做了我所有的代码,但这里是:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Scanner;
public class AppendIfFromFileScanner {
    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>();
        String delimiter = ".*\\s+&.*";
    try {
        FileWriter fstream = new FileWriter("file4.txt");
        BufferedWriter out = new BufferedWriter(fstream);
    try {
        Scanner scanner = new Scanner(file);
        while (scanner.hasNextLine()) {
            lines.add(scanner.nextLine());}
for(int i=0; i<lines.size(); i++){
    for(String s=null; i<lines.size(); i++){
        s = lines.get(i);
        if(!s.matches(delimiter))
        out.write("\r\n" + s);
        else if(s.matches(delimiter))
        out.write(s);}
}
    }catch (FileNotFoundException e) {
System.out.println("Cannot find file.");
}out.close();
}catch (Exception e) {
        System.err.println("Error: " + e.getMessage());
    }
}
}
于 2013-07-11T15:18:33.177 回答
0

您的问题不是 num.get(i-1) 而是 num.get(i) 导致 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

您的 for 循环也可以重写为:

for(int i=0; i<lines.size(); i++) {
      if(num.get(i) != num.get(i+1)){
             num2.add(num.get(i+1));
             System.out.println(lines.get(num2.get(i)));
      }
}
于 2013-07-10T15:12:13.440 回答
0

异常是由于num.get(i)而不是包含元素而生成的num.get(i-1),并且循环正在尝试访问元素。numline.size()lines.size()+1

于 2013-07-10T15:12:35.393 回答