用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文件中。 展开
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文件中。 展开
2个回答
展开全部
因为各个列没有分隔符,我添加了逗号作分隔符.文件内容如下.
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 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号排序。麻烦了~~~
追答
把姓名首字母相同的那一行信息去重
你运行了吗?
那一个没有去掉?
排序的话要改的就多了点.你留个出件吧,这里不够贴了.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把姓名首字母过滤什么意思?
是指把姓名首字母相同的行的4,5列进行求和和平均值吗?
是指把姓名首字母相同的行的4,5列进行求和和平均值吗?
追问
首字母相同的人名 只保留一个;求和还有平均值是跟着每一个人名的;这是两个功能
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询