用java读取txt文件,然后对数据进行排序,去重等操作。

IdNameYearCurrentCumulative16MelissaWill35917NaomiThomas331221RonaldoGomes311122SamDe... Id Name Year Current Cumulative
16 Melissa Will 3 5 9
17 Naomi Thomas 3 3 12
21 Ronaldo Gomes 3 1 11
22 Sam Del-Prete 2 4 10
2 Abe Storey 3 4 6
3 Anthony Tabrin 3 1 7
18 Nathan Bentley 3 2 19
把姓名首字母相同的过滤;4、5列求和、求平均值;按第一列排序;写到新的txt文件中。
展开
 我来答
百度网友845f74e61
推荐于2017-09-07 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1603万
展开全部
因为各个列没有分隔符,我添加了逗号作分隔符.文件内容如下.
Id Name Year Current Cumulative
16, Melissa Will, 3, 5, 9
17, Naomi Thomas, 3, 3, 12
21, Ronaldo Gomes, 3, 1, 11
22, Sam Del-Prete, 2, 4, 10
2, Abe Storey, 3, 4, 6
3, Anthony Tabrin, 3, 1, 7
18, Nathan Bentley, 3, 2, 19

你用这个文件内容,试一下下边的程序.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

public class Test {

public static void main(String[] args) throws Exception {
FileReader fr = new FileReader("H:\\test.txt");
BufferedReader br = new BufferedReader(fr);
int row = 1;

int sum1 = 0, sum2 = 0;
FileWriter fw = new FileWriter("H:\\new.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("Id Name Year Current Cumulative");
bw.newLine();
List<String> first = new ArrayList<String>();
while (br.ready()) {
if (row++ == 1) {
br.readLine();
continue;
}
String line = br.readLine();
String[] array = line.split(",", 5);
String tmp = array[1].trim().substring(0, 1);
if (!first.contains(tmp)) {
sum1 += toInt(array[3].trim());
sum2 += toInt(array[4].trim());
bw.write(line);
bw.newLine();
first.add(tmp);
}
}

bw.write("sum : \t\t\t\t" + sum1 + "\t" + sum2);
bw.newLine();
bw.write("average : \t\t\t" + (sum1 / (first.size() * 1.0)) + "\t"
+ sum2 / (first.size() * 1.0));
br.close();
fr.close();
bw.close();
fw.close();
}

public static int toInt(String str) {
try {
return Integer.parseInt(str);
} catch (Exception e) {
return 0;
}
}

}
更多追问追答
追问
还有一个要求是把姓名首字母相同的那一行信息去重,再根据Id号排序。麻烦了~~~
追答
把姓名首字母相同的那一行信息去重

你运行了吗?
那一个没有去掉?

排序的话要改的就多了点.你留个出件吧,这里不够贴了.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
火——火
2012-04-21 · TA获得超过1701个赞
知道小有建树答主
回答量:944
采纳率:100%
帮助的人:918万
展开全部
把姓名首字母过滤什么意思?
是指把姓名首字母相同的行的4,5列进行求和和平均值吗?
追问
首字母相同的人名 只保留一个;求和还有平均值是跟着每一个人名的;这是两个功能
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式