0

一日中取り組んできたプログラムに問題があります。テキスト ファイルを読み取って、各行を 1 つずつ読み取ろうとしています。その行を取り、その行の単語の配列リストを作成します。次に、arraylist のインデックスを使用して、用語を定義します。

public class PCB {

    public static void main(String arg[]) {
        read();
    }

    public static ArrayList read() {    
        BufferedReader inputStream = null;
        ArrayList<String> tokens = new ArrayList<String>();
        try {
            inputStream = new BufferedReader(new FileReader("processes1.txt"));

            String l;
            while ((l = inputStream.readLine()) != null) {
                Scanner tokenize = new Scanner(l);
                while (tokenize.hasNext()) {
                    tokens.add(tokenize.next());
                }
                return tokens;
            }
        } catch (IOException ioe) {
            ArrayList<String> nothing = new ArrayList<String>();
            nothing.add("error1");
            System.out.println("error");
            //return nothing;
        }
        return tokens;
    }
}

私が得ているエラーは、最初の行しか読み取らないということです。私は何を間違っていますか?よろしくお願いします

4

3 に答える 3

2

「リターントークン」があります。あなたのwhileループで。その早期復帰は、最初の行での処理を効果的に遮断するようです。

于 2010-09-20T02:38:01.513 に答える
0

ループを次のように変更してみてください。returnステートメントをどのように移動したかに注意してください。

while ((l = inputStream.readLine()) != null) {
    Scanner tokenize = new Scanner(l);
    while (tokenize.hasNext()) {
        tokens.add(tokenize.next());
    }
}
return tokens; // <-- outside the loop

編集:ファイル全体を読み取り、各行のトークンを個別の配列に格納する場合は、ArrayListのを作成できますArrayList

public static ArrayList<ArrayList<String>> tokenizeFile(string filename) {    
    BufferedReader inputStream = new BufferedReader(new FileReader(filename));
    ArrayList<ArrayList<String>> lines = new ArrayList<ArrayList<String>>();

    while (true) {
        String line = inputStream.readLine();
        if (line == null) break;

        ArrayList<String> tokens = new ArrayList<String>();
        Scanner tokenizer = new Scanner(line);
        while (tokenizer.hasNext()) {
            tokens.add(tokenizer.next());
        }
        lines.Add(tokens);
    }
    return lines;
}

注:私のJavaはさびています。

于 2010-09-20T02:57:56.457 に答える
0

これに単純化して...

        String l;
        while ((l = inputStream.readLine()) != null) {
            tokens.addAll(Arrays.asList(l.split(" ")));
        }

... ファイル内のすべての行にすべてのトークンのリストを作成します (それが必要な場合)。

于 2010-09-20T03:25:53.593 に答える