import java.io.*;
import java.util.*;
public class TextFileDemo {
public static void main(String[] args)throws Exception{
TreeSetts = getReader("D:\\a.txt");
for(Iteratorit = ts.iterator(); it.hasNext();){
FileClass fc = it.next();
System.out.println(fc.toString());
}
}
private static TreeSetgetReader(String pathName)throws Exception{
BufferedReader br = new BufferedReader(new FileReader(pathName));
String str = null;
Listlist = new ArrayList ();
while((str=br.readLine())!=null){
list.add(str);
}
br.close();
TreeSetset = new TreeSet ();
for(int i = 0; i < list.size(); i++){
if(i == 0){
String[] arr = list.get(i).split(" +");
for(String s : arr)
System.out.print(s+"\t");
}else{
String[] arr = list.get(i).split(" +");
if(arr.length == 5)
set.add(new FileClass(arr[0],arr[1],arr[2],arr[3],arr[4],""));
else
set.add(new FileClass(arr[0],arr[1],arr[2],arr[3],arr[4],arr[5]));
}
}
System.out.println();
return set;
}
}
class FileClass implements Comparable{
private String id;
private String headache;
private String muscle;
private String pain;
private String temperature;
private String flu;
public FileClass(String id, String headache, String muscle, String pain, String temperature, String flu){
this.id = id;
this.headache = headache;
this.muscle = muscle;
this.pain = pain;
this.temperature = temperature;
this.flu = flu;
}
public String toString(){
return id+"\t"+headache+"\t\t"+muscle+"\t"+pain+"\t"+temperature+"\t\t"+flu;
}
public int compareTo(FileClass o1) {
int num = o1.headache.compareTo(this.headache);
if(num==0)
return 1;
else
return num;
}
}
//输出结果:
看不懂你这个输出顺序
如果按“对muscle pain temperature flu 列排序 “
输出应该muscle pain为yes的都在前面。。
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
static public enum ETemp{
NORMAL("normal",0),HIGH("high",1),VERY_HIGH("very_high",2);
final public String text;
final public int v;
ETemp(String t,int v){ text=t;this.v=v;}
public String toString(){return text;}
}
static public class Patient{
public int id;
public boolean headache, muscle_pain,flu;
public ETemp temperature;
public String toString(){
return "e"+id+"\t"+(headache?"yes":"no")+"\t"+
(muscle_pain?"yes":"no")+"\t"+
temperature+"\t"+(flu?"yes":"no");
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
Pattern pn=Pattern.compile(
"e(\\d+)\\s{2,}(yes|no)\\s{2,}(yes|no)\\s{2,}(normal|very high|high)\\s{2,}(yes|no)");
Files.lines(new File("data.txt").toPath()).map((line)->{
Matcher m=pn.matcher(line);
Patient p=null;
if(m.find()){
p=new Patient();
p.id=Integer.parseUnsignedInt(m.group(1));
p.headache=m.group(2).equals("yes");
p.muscle_pain=m.group(3).equals("yes");
switch(m.group(4)){
case "normal":default:p.temperature=ETemp.NORMAL;break;
case "high":p.temperature=ETemp.HIGH;break;
case "very high":p.temperature=ETemp.VERY_HIGH;break;
}
p.flu=m.group(5).equals("yes");
}
return p;
}).filter((p)->p!=null).sorted((a,b)->{
int mr=(b.muscle_pain?1:0)-(a.muscle_pain?1:0),
fr=(b.flu?1:0)-(a.flu?1:0),
tr=a.temperature.v-b.temperature.v;
return mr!=0?mr: (tr!=0?tr:fr);
}).forEach((o)->System.out.println(o));
}
}
e9 yes yes normal yes
e1 yes yes normal no
e4 no yes normal no
e8 no yes normal no
e2 yes yes high yes
e3 yes yes very_high yes
e6 no yes very_high yes
e7 yes no high yes
e10 no no high yes
e5 no no high no
java 8的代码,需要java 8运行。按musclepain > temperature>flu的顺序。。。
看了半天看不懂你样例输出中到底是什么顺序,你所给的样例输出不符合任何顺序,需要解释再说。