JAVA 读入txt文档 并对属性列排序

txt文档内容:idheadachemusclepaintemperatureflue1yesyesnormalnoe2yesyeshighyese3yesyesvery... txt文档内容:
id headache muscle pain temperature flu
e1 yes yes normal no
e2 yes yes high yes
e3 yes yes very high yes
e4 no yes normal no
e5 no no high no
e6 no yes very high yes
e7 yes no high yes
e8 no yes normal no
e9 yes yes normal yes
e10 no no high yes
输出结果:
id headache muscle pain temperature flu
e1 yes yes normal no
e2 yes yes high yes
e3 yes yes very high yes
e7 yes no high yes
e9 yes yes normal yes
e4 no yes normal no
e5 no no high no
e6 no yes very high yes
e8 no yes normal no
e10 no no high yes
..................
要求输出结果对齐 同时要对muscle pain temperature flu 列排序 最后分别输出排序结果
本人菜鸟,求具体代码
展开
 我来答
小童鞋_成er
推荐于2016-11-27 · 知道合伙人数码行家
小童鞋_成er
知道合伙人数码行家
采纳数:4650 获赞数:22879
主要从事J2EE工作,热爱Java,用心讨论技术,共同进步。

向TA提问 私信TA
展开全部
import java.io.*;
import java.util.*;
public class TextFileDemo {
public static void main(String[] args)throws Exception{
TreeSet<FileClass> ts = getReader("D:\\a.txt");
for(Iterator<FileClass> it = ts.iterator(); it.hasNext();){
FileClass fc = it.next();
System.out.println(fc.toString());
}
}
private static TreeSet<FileClass> getReader(String pathName)throws Exception{
BufferedReader br = new BufferedReader(new FileReader(pathName));
String str = null;
List<String> list = new ArrayList<String>();
while((str=br.readLine())!=null){
list.add(str);
}
br.close();
TreeSet<FileClass> set = new TreeSet<FileClass>();
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<FileClass>{
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;
}
}

//输出结果:

CloudMonarch
2014-07-08 · TA获得超过233个赞
知道答主
回答量:127
采纳率:0%
帮助的人:159万
展开全部

看不懂你这个输出顺序


如果按“对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的顺序。。。

看了半天看不懂你样例输出中到底是什么顺序,你所给的样例输出不符合任何顺序,需要解释再说。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式