1

我有一个包含三个人的数据的文本文件。每个人的属性用逗号分隔。它看起来像这样:

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

我最终要完成的是按姓氏升序对这些人进行排序。

不确定我是否以正确的方式考虑这个问题,但我想创建一个二维数组,将每个属性分配给正确的行和列。我们现在可以忘记排序。

如何让每一行填充数组的一行,每个单独的属性都在自己的列中?

也许我应该逐行读取文件,然后使用 lineFromFile.charAt(index) 将每个字符添加到二维数组中以填充或类似的东西?任何样品建议将不胜感激。

4

3 回答 3

1

String.split()可以在这里提供帮助:

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

但是您可能真正想要的是放弃二维数组的想法并创建一个人员列表,其中 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], /*...*/));

二维数组几乎总是表明您需要一个类来表示数据的“行”。

排序也变得非常容易:

//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

我建议不要使用二维数组并使用您提到的字段创建一个类(根据@Mark 的帖子)。然后创建该类实例的一维数组。

但是,如果您想走 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");

您可以使用缓冲阅读器逐行阅读并使用列表来累积行

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();
}

然后您可以将列表转换为二维数组。

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 回答