利用正则表达式将字符串"张三:21:98|李四:22:89|王五:20:98"拆分,而后把内容保存在Student对象中,利用比较器排序输出
- 创建Student类,继承了Comparable接口,指定泛型为类
class Student implements Comparable<Student>{//指定泛型为Student
private String name;
private int age;
private int grade;
public void setName(String name){this.name=name;}
public void setAge(int age){this.age=age;}
public void setGrade(int grade){this.grade=grade;}
public String getName(){return this.name;}
public int getAge(){return this.age;}
public int getGrade(){return this.grade;}
public Student(String name,int age,int grade){
this.setName(name);
this.setAge(age);
this.setGrade(grade);
}
public String toString(){//覆写toString方法
return "姓名:"+this.getName()+"\t年龄:"+this.getAge()+"\t\t分数:"+this.getGrade();
}
public int compareTo(Student s) {//按照分数大优先,年龄小优先的规则覆写比较器的compareTo方法
if(this.getGrade()>s.getGrade()){
return -1;
}else if(this.getGrade()<s.getGrade()){
return 1;
}else{
if(this.getAge()<s.getAge()){
return -1;
}else if(this.getAge()>s.getAge()){
return 1;
}else{
return 0;
}
}
}
}
- 主加载类,将指定字符串拆分。具体过程为:先将字符串按照"|“拆分成三个字符串,再将这三个字符串按照”:"各拆分成Student类中的属性,而后创建对象,利用比较器排序输出
public class Train{
public static void main(String args[]){
String str="张三:21:98|李四:22:89|王五:20:98";//将要拆分的字符串
String []s=str.split("\\|");//一级拆分,按照"|"来拆分,拆成三个字符串
String []san1=s[0].split("\\:");//二级拆分,按照":"来拆分,拆成三个更小的字符串
String []san2=s[1].split("\\:");//二级拆分,按照":"来拆分,拆成三个更小的字符串
String []san3=s[2].split("\\:");//二级拆分,按照":"来拆分,拆成三个更小的字符串
String san1m=san1[0];
String san2m=san2[0];
String san3m=san3[0];
int san1a=Integer.parseInt(san1[1]);//强制类型转换,将字符串数字转换为int类型数字
int san2a=Integer.parseInt(san2[1]);
int san3a=Integer.parseInt(san3[1]);
int san1g=Integer.parseInt(san1[2]);
int san2g=Integer.parseInt(san2[2]);
int san3g=Integer.parseInt(san3[2]);
Student s1=new Student(san1m,san1a,san1g);//创建Student对象
Student s2=new Student(san2m,san2a,san2g);
Student s3=new Student(san3m,san3a,san3g);
Student[]a={s1,s2,s3};//对象数组
java.util.Arrays.sort(a);//调用数组排序算法(会自动按照已经设置好的比较规则来排序)
for(int i=0;i<a.length;++i){//输出
System.out.println(a[i]);
}
}
}
- 不足之处
实现过程比较繁琐,感觉拆分那一块应该可以运用二维数组