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

Java 如果行包含字符,则追加行,java,if-statement,append,concatenation,Java,If Statement,Append,Concatenation,我试图编写一个程序来读取一个文本文件,并在文本文件中添加一行,比如说,B行,如果B行包含字符串“&”,那么在前一行,a行之后添加一行。这是我的密码: import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Scanner; public class Inputs { public static void main(String[] arg

我试图编写一个程序来读取一个文本文件,并在文本文件中添加一行,比如说,B行,如果B行包含字符串“&”,那么在前一行,a行之后添加一行。这是我的密码:

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.");
        }
    }
}
我认为这是因为我从I中减去了1,但我不确定为什么这是一个问题,因为我将I初始化为1而不是0来避免这个问题。
任何帮助都将不胜感激;我也尝试过StringBuffer.append()方法,但运气不好,但是如果您有一个解决方案可以使用该方法或其他方法,那就太棒了。

您的问题不是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)));
      }
}

for(int i=0;i由于
num.get(i)
而不是
num.get(i-1)
生成异常,因为
num
包含
line.size()
元素,循环正在尝试访问
line.size()+1
元素。

我通过本网站上的其他问题和其他一些网站上的一些东西解决了它。我基本上重新编写了我所有的代码,但它是:

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());
    }
}
}
导入java.io.BufferedWriter;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileWriter;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类AppendIfFromFileScanner{
公共静态void main(字符串参数[]){
File File=新文件(“C:\\Users\\frencke\\workspace\\Testing Stuff\\Append Tetsing\\file3.txt”);
ArrayList行=新的ArrayList();
字符串分隔符=“.*\\s+&.*”;
试一试{
FileWriter fstream=新的FileWriter(“file4.txt”);
BufferedWriter out=新的BufferedWriter(fstream);
试一试{
扫描仪=新扫描仪(文件);
while(scanner.hasNextLine()){
lines.add(scanner.nextLine());}

对于(int i=0;i1),对代码块使用一致的逻辑缩进。代码缩进旨在帮助人们理解程序流程。2)始终复制/粘贴错误和异常输出。3)请对代码、输入/输出和结构化文档(如HTML或XML)使用代码格式。您不能简单地从数组中的另一个索引开始。数组始终从0开始。您可以在其他位置使用
i-1
来补偿偏移。顺便说一句:如果您试图获取“i-1”在一个只有一个位置(或如上面所说的大小1)的数组中,0和1可以加入位置0,但第二次访问位置1会给你出边界的感觉。@AndrewThompson,我修正了缩进并引用了错误。@KBorja,为什么我的数组只有大小1?我恐怕不明白——num.get(i)为什么导致此异常?我将我的for循环更改为您建议的,但异常没有更改。哦,当行的大小只有1时,num.get(I)将是1(索引为2)。好的。现在我不明白为什么行的大小只有1,因为它正在读取的文本文档中有5行。我重写了for循环(参见Mathias Ghys的回答)这样就没有更多的行了。size()+1内容,但这没有帮助。
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());
    }
}
}