我正在编写一个Java应用程序,该应用程序应该读取包含每行记录的输入文件,并用逗号分隔这些字段。应用程序的输出应该在标准输出格式如下:按对象排序对象的ArrayList属性并组织它们
Age1
Sex1
name1
name2
Sex2
name3
name4
e.g
33
Female
Jayanta
Kanupriya
44
Female
Lajjo
Rajjo
Male
Raghav
Sitaram
等等....
我创建了一个Person类来保存数据,并实现与接口的compareTo可比接口对年龄进行初步分类并对性别进行二级分类。我可以稍后在名称上添加三级排序。
public class Person implements Comparable<Person>{
private String name;
private int age;
private String sex;
/**
* @param age, sex and name
*/
public Person(String name, int age, String sex) {
this.setName(name);
this.setAge(age);
this.setSex(sex);
}
//getters and setters
@Override
public int compareTo(Person person) {
return this.age < person.getAge()?-1:this.age > person.getAge()?1:sortOnGender(person);
}
public int sortOnGender(Person person) {
if (this.sex.compareToIgnoreCase(person.getSex()) < 0) {
return -1;
}
else if (this.sex.compareToIgnoreCase(person.getSex()) > 0) {
return 1;
}
else {
return 0;
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(String.valueOf(this.age)).append('-').append(this.sex).append('-').append(this.name);
return sb.toString();
}
}
接下来在主要方法的App类中,我创建了Person的ArrayList,并填充数据并使用Collections.sort()进行排序。我打印了ArrayList,并按排序顺序排列。然而,问题是如何获得所需格式的数据。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
public class App {
//An array of persons
private static List<Person> persons = new ArrayList<Person>();
public static void main(String[] args) {
File inputfile = new File(args[0]);
if(inputfile.exists()) {
String line;
BufferedReader br;
StringTokenizer st = null;
try {
br = new BufferedReader(new FileReader(inputfile));
// Read comma seperated file line by line
while((line = br.readLine()) != null) {
//Break the line using "," as field seperator
st = new StringTokenizer(line, ",");
// Number of columns in the line
int numcols = st.countTokens();
if(numcols > 0) {
String[] cols = new String[st.countTokens()];
// Till the time columns are there in the line
while(st.hasMoreTokens()) {
for(int i=0; i < numcols; i++) {
cols[i] = st.nextToken();
}
}
// If there are elements in the cols array
if(cols.length !=0) {
// Create a list of persons
persons.add(new Person(cols[0].trim(), Integer.parseInt(cols[1].toString().trim()), cols[2].trim()));
}
}
else {
// Print error and continue to next record (Takes care of blank lines)
System.err.println("Error: No columns found in line");
}
}
// Sort the Collection
Collections.sort(persons);
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
else {
System.out.println("Specify the location of the input file");
}
System.out.println(persons);
}
}
“所需的格式”到底是什么?什么样的格式? –
欢迎来到SO。你试图解决这个问题的尝试是什么? – Daniel
看起来好像你想通过操作来执行一个n维组,在你的例子中,n = 2。番石榴可以帮你做到这一点,或者你可以自己做。 –