txt文件内容用java排序问题
求大神写下代码,我的txt文件内容是:小明数学90小明英语80小红数学80小红英语95小亮数学101小亮英语79然后我只要根据数学成绩排序就行了,结果应该是:小亮数学10...
求大神写下代码,我的txt文件内容是:
小明数学 90 小明英语 80
小红数学 80 小红英语95
小亮数学101 小亮英语 79
然后我只要根据数学成绩排序就行了,结果应该是:
小亮数学101 小亮英语 79
小明数学 90 小明英语 80
小红数学 80 小红英语95。真的不会,求写下java代码吧 展开
小明数学 90 小明英语 80
小红数学 80 小红英语95
小亮数学101 小亮英语 79
然后我只要根据数学成绩排序就行了,结果应该是:
小亮数学101 小亮英语 79
小明数学 90 小明英语 80
小红数学 80 小红英语95。真的不会,求写下java代码吧 展开
展开全部
你的txt文件是干吗的啊?是要从中用java读取的,还是作为资料。
如果作为资料的话倒好写,就是写个实体类,对实体类的数学成绩排序
测试类:
public static void main(String[] args) {
Course c1 = new Course("小明",90,80);
Course c2 = new Course("小红",80,95);
Course c3 = new Course("小亮",101,79);
List<Course> list = new ArrayList<Course>();
list.add(c1);
list.add(c2);
list.add(c3);
Collections.sort(list);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getName()+"数学: "+list.get(i).getMath()+" "+list.get(i).getName()+"英语: "+list.get(i).getEnglish());
}
}
实体类:
public class Course implements Comparable{
private Integer math ;
private Integer english;
private String name;
public Course(String name,Integer math,Integer english){
this.english = english;
this.name = name;
this.math = math;
}
public Integer getMath() {
return math;
}
public void setMath(Integer math) {
this.math = math;
}
public Integer getEnglish() {
return english;
}
public void setEnglish(Integer english) {
this.english = english;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Object o) {
Course c = (Course)o;
if(this.math > c.math){
return -1;
}else if(this.math == c.math){
return 0;
}else{
return 1;
}
}
}
如果要用java读取的话,先通过正则取出值,再进行排序,主要是在测试类中进行,其他的不变
如果作为资料的话倒好写,就是写个实体类,对实体类的数学成绩排序
测试类:
public static void main(String[] args) {
Course c1 = new Course("小明",90,80);
Course c2 = new Course("小红",80,95);
Course c3 = new Course("小亮",101,79);
List<Course> list = new ArrayList<Course>();
list.add(c1);
list.add(c2);
list.add(c3);
Collections.sort(list);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getName()+"数学: "+list.get(i).getMath()+" "+list.get(i).getName()+"英语: "+list.get(i).getEnglish());
}
}
实体类:
public class Course implements Comparable{
private Integer math ;
private Integer english;
private String name;
public Course(String name,Integer math,Integer english){
this.english = english;
this.name = name;
this.math = math;
}
public Integer getMath() {
return math;
}
public void setMath(Integer math) {
this.math = math;
}
public Integer getEnglish() {
return english;
}
public void setEnglish(Integer english) {
this.english = english;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Object o) {
Course c = (Course)o;
if(this.math > c.math){
return -1;
}else if(this.math == c.math){
return 0;
}else{
return 1;
}
}
}
如果要用java读取的话,先通过正则取出值,再进行排序,主要是在测试类中进行,其他的不变
追问
是的,我是要用java从中提取的。我是想用java读取txt文件内容的,然后通过正则取出值,再进行排序。你写的代码中,如果txt文件中有很多内容,这样就比较麻烦了。所以麻烦改下你的代码,谢谢
追答
注意几点:文件路径用你的文件路径, 文件内容格式必须是:字符串1+空格+数学成绩+空格+字符串2+空格+英语成绩,否则报错 实体类不用修改
public static void main(String[] args) { try { List list = new ArrayList();
FileReader fr = new FileReader("/home/develop/Desktop/imformation.txt");
BufferedReader br = new BufferedReader(fr); String str = null; String[] ss = null;Course c = null; while((str = br.readLine()) != null&&!str.equals("")) { ss = str.trim().split(" ");
String name = ss[0].substring(0,ss[0].lastIndexOf("数学")); c = new Course(name,Integer.parseInt(ss[1]),Integer.parseInt(ss[3].toString())); list.add(c);}
Collections.sort(list);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getName()+"数学: "+list.get(i).getMath()+" "+list.get(i).getName()+"英语: "+list.get(i).getEnglish());
}
br.close(); fr.close(); } catch (IOException e) { e.printStackTrace(); }
展开全部
很明显你的文本格式为:
字符串1+空格+数学成绩+空格+字符串2+空格+英语成绩。
所以:
String str="小明数学 90 小明英语 80";
String [] ss=str.split(" ");就可以得到 字符串1 数学成绩 字符串2 英语成绩 这四个字符。
之后用Double.valueOf("数学成绩“)就可以得数学成绩。。
故而,可以构建一个学生的类,实现Comparable接口。学生类属性为String inputStr,double mathScore;compareTo方法就是根据mathScore来比较即可
字符串1+空格+数学成绩+空格+字符串2+空格+英语成绩。
所以:
String str="小明数学 90 小明英语 80";
String [] ss=str.split(" ");就可以得到 字符串1 数学成绩 字符串2 英语成绩 这四个字符。
之后用Double.valueOf("数学成绩“)就可以得数学成绩。。
故而,可以构建一个学生的类,实现Comparable接口。学生类属性为String inputStr,double mathScore;compareTo方法就是根据mathScore来比较即可
更多追问追答
追问
我实在写不出代码,因为刚刚学java。麻烦写下代码我好参考
追答
- - 都说得那么明白了,再配合 @love小唐哥 的代码,你还不会吗?
人名就用 String n="小明数学".substring(0,"小明数学".lastIndexOf("数学"));就行了。。
- - 学编程,要自己多敲代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用Hashmap存储数据,再先按数学排序,再按英语排序
追问
我知道大意,就是不会写代码。哎
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询