-1

不明なサイズの行を含む txt ファイルから読み取るにはどうすればよいですか? 例えば:

Family1,john,mark,ken,liam

Family2,jo,niamh,liam,adam,apple,joe

各行には異なる数の名前があります。次のようなオブジェクトタイプを使用すると、読み込むことができます

 family(parts[0], parts[1], parts[2]) 

しかし、それは、それぞれに含まれる量がわかっている場合です。それぞれにいくつ入るかわからないまま、どのように読み込めばよいでしょうか?

FileReader fr = new FileReader("fam.txt");
       BufferedReader br = new BufferedReader(fr);
       String fileLines;
       String[] parts;    
        while(br.ready())
        {
          fileLines = br.readLine();
          parts = fileLines.split(",");
          .
          .
4

5 に答える 5

0

スキャナーを使用すると、はるかに簡単です。両方をwhileループに入れることができます

Scanner sc = new Scanner(new File(myFile.txt));
while(sc.hasNextLine()) {
  while(sc.hasNextString()) {
    String str = sc.nextString();
  }
}

これは単純化されたバージョンであり、Java が正しく読み取るために変数に値を格納する必要があるため、正しく動作しません。より詳細な説明については、Java スキャナーのドキュメントを参照してください。スキャナは、これまで行っていたものよりもはるかに簡単です

于 2013-11-08T20:02:22.133 に答える
0

ArrayList<E>: インターフェイスのサイズ変更可能な配列の実装List。すべてのオプションのリスト操作を実装し、 を含むすべての要素を許可しnull、リストを格納するために内部で使用される配列のサイズを操作するメソッドを提供します。

ArrayListインスタンスにはcapacity、リスト内の要素を格納するために使用される配列のサイズがあります。それは常に少なくともリストサイズと同じ大きさです。要素が に追加されるとArrayList、その容量は自動的に増加します。成長ポリシーの詳細は、要素の追加には一定の償却時間コストがあるという事実以外は指定されていません。

ArrrayList.add(E e)したがって、データを読み取り、メソッドを使用して配列リストに追加するだけです。

于 2013-11-08T19:53:52.600 に答える
0

私の個人的な好みは、 Scanner クラスを使用することです。ここで機能を確認できます。スキャナーを使用すると、ファイルを一度に 1 行ずつ解析し、それらの値を文字列に格納できます。

Scanner scan = new Scanner(new File("fam.txt"));
List<String> families = new ArrayList<String>();
while(scan.hasNextLine()){
   families.add(scan.nextLine());
}

次に、ArrayList 内のファミリを使用して、好きなことを行うことができます。

于 2013-11-08T19:57:36.183 に答える
0

String[]データを単純な配列にロードしようとしているため、苦労しています。ArrayList内部配列を維持し、そのサイズを動的に増加させるものを使用する必要があります。

FileReader fr = new FileReader("fam.txt");
BufferedReader br = new BufferedReader(fr);
String fileLines;
String[] parts;   
List<List<String>> data = new ArrayList<>(); 
while(br.ready()) {
    fileLines = br.readLine();
    parts = fileLines.split(",");
    data.add(Arrays.asList(parts));
    //do what you want/need...
}
//do what you want/need...

より良いアプローチは、データを解析してString[] parts、特定のケースのデータを含むクラスのオブジェクトを構築することです。

public void yourMethod() {
    FileReader fr = new FileReader("fam.txt");
    BufferedReader br = new BufferedReader(fr);
    String fileLines;
    String[] parts;   
    List<Family> familyList = new ArrayList<>(); 
    while(br.ready()) {
        fileLines = br.readLine();
        parts = fileLines.split(",");
        Family family = new Family(parts[0], parts[1], parts[2]);
        familyList.add(family);
        //do what you want/need...
    }
    //do what you want/need...
}
于 2013-11-08T19:50:48.647 に答える