-4

次のように、FirstName LastName のペアを含む .txt ファイルがあります。

  • サム・フォスター
  • ジャック・ホワイト
  • ジョン・アブナー
  • マイク・ブリッグス
  • サラ・ミルズ

(もちろん箇条書きはありません) 区切り文字はスペースです。タスクは、Java でこのファイルを姓でソートすることなので、次のようになります。

  • ジョン・アブナー
  • マイク・ブリッグス
  • サム・フォスター
  • サラ・ミルズ
  • ジャック・ホワイト

私は検索して検索しましたが、理解できる説明が見つかりませんでした。これを行う簡単な方法はありますか?

4

2 に答える 2

1

String の 2 番目の単語を取得して比較する Comparator を作成するだけです。

public class StringComparator implements Comparator<String> {
  public int compare(String b1, String b2) {
      return b1.split(" ")[1].compareTo(b2.split(" ")[1]);
  }
}

その後、使用できますArrays.sort(array, new StringComparator());

于 2013-05-20T19:11:31.553 に答える
1

最後にミドルネームやサフィックスがないことを確認してくださいJr

ファイルをリストに読み込みます。

Scanner s = new Scanner(new File("filepath"));
ArrayList<String> list = new ArrayList<String>();
while (s.hasNext())
    list.add(s.next());
s.close();

カスタム コンパレータを定義します。

static class LastNameComparator implements Comparator<String> {
    public int compare(String b1, String b2) {
        String[] arr1 = b1.split(" ");
        String[] arr2 = b2.split(" ");
        if (arr1.length > 1 && arr2.length > 1)
            return arr1[arr1.length-1].compareTo(arr2[arr2.length-1]);
        else
            return 0;
    }
}

カスタム コンパレータを使用してリストを並べ替えます。

Collections.sort(list, new LastNameComparator());

ファイルに書き戻します。

FileWriter writer = new FileWriter("outFile.txt"); 
for(String str: list) {
  writer.write(str);
}
writer.close();
于 2013-05-20T18:58:25.800 に答える