1

3人用のデータが入ったテキストファイルがあります。各人のプロパティはコンマで区切られます。次のようになります。

Patrick, Gary, Male, Blue, 1/28/1948
Carson, Larry, Male, Pink, 11/24/1976
Fisher, Paul, Male, Orange, 5/12/1995

私が最終的に達成しようとしていることは、それらの人々を名前で昇順で並べ替えることです。

これを正しい方法で考えているかどうかはわかりませんが、各プロパティを適切な行と列に割り当てる2D配列を作成したいと思いました。今のところ、並べ替えを忘れることができます。

各行に配列の行を設定し、それぞれの個別のプロパティを独自の列に配置するにはどうすればよいですか?

たぶん、ファイルを1行ずつ読み取り、lineFromFile.charAt(index)を使用して各文字を2D配列に追加して、データを入力する必要がありますか?サンプルの提案をいただければ幸いです。

4

3 に答える 3

1

String.split()ここで役立つことがあります:

person[i] = line.split(", ");

しかし、おそらく本当に必要なのは、2次元配列のアイデアを放棄して、Personのリストを作成することです。Personは、定義するクラスです。

public class Person {
  public final String firstName;
  public final String lastName;
  public final String birthDate; //should really be a java.util.Date
  //...plus a constructor for the above
}

//...
List<Person> people = new ArrayList<Person>();
String line = reader.readLine();
String[] fields = line.split(", ");
people.add(new Person(fields[0], fields[1], /*...*/));

2D配列は、ほとんどの場合、データの「行」を表すクラスが必要であることを示しています。

並べ替えも非常に簡単になります。

//sorts the people in descending order by first name
people.sort(new Comparator<Person>() {
    public int compare(Person a, Person b) {
       b.firstName.compareTo(a.firstName);
    }
});
于 2011-03-10T18:53:41.610 に答える
0

2D配列を使用せず、言及したフィールドを使用してクラスを作成することをお勧めします(@Markの投稿による)。次に、そのクラスのインスタンスの1D配列を作成します。

ただし、2Dアレイルートを使用する場合は、次のようにします。

String[][] people = new String[][] {
  {"Patrick", "Gary", "Male", "Blue", "1/28/1948"},
  {"Carson", "Larry", "Male", "Pink", "11/24/1976"},
  {"Fisher", "Paul", "Male", "Orange", "5/12/1995"}
};
于 2011-03-10T18:57:13.757 に答える
0

あなたが読者を得ることができると仮定して

StringReader in = new StringReader(
    "Patrick, Gary, Male, Blue, 1/28/1948\n" +
    "Carson, Larry, Male, Pink, 11/24/1976\n" +
    "Fisher, Paul, Male, Orange, 5/12/1995");

バッファリングされたリーダーを使用して1行ずつ読み取り、リストを使用して行を蓄積できます

List<String[]> splitLines = new ArrayList<String[]>();
try {
  BufferedReader lineIn = new BufferedReader(in);
  for (String line; (line = lineIn.readLine()) != null;) {
    String[] lineParts = line.split(",");
    // Maybe check that lineParts has the right length here.
    splitLines.add(lineParts);
  }
} finally {
  in.close();
}

次に、リストを2次元配列に変換できます。

String[][] linesArray = splitLines.toArray(new String[][] {});

その後、カスタムコンパレータを使用して並べ替えることができます。

Array.sort(linesArray, new Comparator<String[]>() {
  public int compare(String[] linea, String[] lineb) {
    ...  // the date should be in linea[4] and lineb[4].
  }
})();
于 2011-03-10T18:58:27.383 に答える