-1

行 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.");
        }
    }
}

エラーが発生します

スレッド「メイン」での例外 java.lang.IndexOutOfBoundsException: インデックス: 1、サイズ: java.util.ArrayList.RangeCheck (不明なソース) で 1 java.util.ArrayList.get (不明なソース) で Inputs.main(Inputs.ジャワ:21)

21行目、

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

i から 1 を引いているからだと思いますが、これを避けるために i を 0 ではなく 1 として初期化したので、なぜそれが問題なのかわかりません。助けていただければ幸いです。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 に答える