如果行包含字符,则追加行

时间:2013-07-10 15:09:20

标签: java if-statement append concatenation

我正在尝试编写一个程序来读取文本文件,并在文本文件中添加一行,比如说行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.");
        }
    }
}

我收到了错误

  

线程“main”中的异常java.lang.IndexOutOfBoundsException:索引:1,大小:1     at java.util.ArrayList.RangeCheck(Unknown Source)     at java.util.ArrayList.get(Unknown Source)     在Inputs.main(Inputs.java:21)

第21行,

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

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

3 个答案:

答案 0 :(得分:0)

您的问题不是num.get(i-1),而是导致java.lang.IndexOutOfBoundsException的num.get(i):索引:1,大小: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)));
      }
}

答案 1 :(得分:0)

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

答案 2 :(得分: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());
    }
}
}