1

テキストファイルを「arraylist行」にバッファリングしています。次に、各行から情報を見つけて、構築したモデルにデータを追加できるように、各行を新しいarrayListパーツに分割する必要があります。 arrayLists は展開可能なプロパティがあるためです。つまり、行またはテキスト ファイルのサイズを気にする必要はありません。

コードは以下のとおりです。

    try(BufferedReader buffer = 
            new BufferedReader(new FileReader("src/Sample.txt")))
    {
        String currentLine;
        ArrayList<String> lines = new ArrayList<String>();
        ArrayList<String> parts = new ArrayList<String>();
        //ListIterator<String> lineItr = lines.listIterator();

        while((currentLine = buffer.readLine()) != null)
        {
            lines.add(currentLine);

            for(String line : lines)
            {
                parts.addAll(line.split("\\s+"));

            }


            //lineItr.next();
            //lineItr.set(currentLine);

            //System.out.println(lineItr.next());
        }
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }

}

私はparts.addAll(line.split("\s+");で問題を抱えています;なぜステートメントが行を繰り返し処理せず、文字列の各部分を分割してparts配列リストに追加しないのか理解できません。誤解ですか?ここに何か?

ありがとうバブル

4

5 に答える 5

3

list.addAll()配列はコレクションではありませんjava.util.Collectionstr.splitしたがって、リストに直接追加することはできません。最初にリストに変換する必要があります。

for(String line : lines)
{
   parts.addAll(Arrays.asList(line.split("\\s+"));
}
于 2013-05-03T12:29:28.840 に答える
2

String.split() は String の配列を返します。したがって、 Arrays.asList() を使用して list に変換する必要があります。

parts.addAll(line.split("\\s+"));

上記の行は次のとおりです。

parts.addAll(Arrays.asList(line.split("\\s+")));

または :

Collections.addAll(parts, line.split("\\s+"));
于 2013-05-03T12:27:32.543 に答える
2

これを試して

parts.addAll(Arrays.asList(line.split("\\s+")));
于 2013-05-03T12:28:59.527 に答える
1

List.addAll は Collection を受け入れますが、line.split("\\s+")String[] を返します。このようにできます

parts.addAll(Arrays.asList(line.split("\\s+")));
于 2013-05-03T12:27:39.113 に答える
0

新しい行が到着するたびに、すべてをもう一度追加します。内側の「for」ループを削除し、代わりに currentLine を分割します。

コメントに基づいて編集:

Java Way では、年と月のオブジェクトをコンテナーとして実装します。より簡単な代替方法は、文字列キー マップを使用することです。

于 2013-05-03T12:31:17.657 に答える