编程高手们,能不能帮我搞定一个程序。假设data.txt文件中有如下数据:
1,2,5
2,4
2,3
1,2,4
1,3
2,3
1,3
1,2,3,5
1,2,3要求是:
1、从data.txt文件中读取上面那些数据。
2、计算每个值的个数,例如 1的个数是 6.
2、把每一行的数据放入到一个数组里,
例如:s[1]={1,2,5}、s[2]={2,4}
1,2,5
2,4
2,3
1,2,4
1,3
2,3
1,3
1,2,3,5
1,2,3要求是:
1、从data.txt文件中读取上面那些数据。
2、计算每个值的个数,例如 1的个数是 6.
2、把每一行的数据放入到一个数组里,
例如:s[1]={1,2,5}、s[2]={2,4}
第一个问题你需要了解 java io 编程,随便查下就可以搞定第二和第三个可以放到一起来说, 先读一行,然后按 , 分解,然后每个元素放到一个数组中,这样可以满足第三问题第二个问题你可在在第三个问题完成后再解决,即再扫一遍,并计数
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream("data.txt")));
String str = null;
StringBuilder result = new StringBuilder();
Map<String, Integer> map = new HashMap<String, Integer>();
while ((str = reader.readLine()) != null) {
if (result.length() > 0) {
result.append(";");
}
result.append(str);
}
String[] arr = result.toString().split(";");
for (String arrItem : arr) {
String[] items = arrItem.split(",");
for (String item : items) {
if (map.containsKey(item)) {
int count = map.get(item);
map.put(item, count + 1);
} else {
map.put(item, 1);
}
}
}
for (Map.Entry<String, Integer> mapItem : map.entrySet()) {
System.out.println("number:"+mapItem.getKey() + " frequency:" + mapItem.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}}
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;public class Test { public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("D://t.txt")));
String s = null;
ArrayList<ArrayList<Integer>> datas = new ArrayList<ArrayList<Integer>>();
while ((s = br.readLine()) != null) {
ArrayList<Integer> list = new ArrayList<Integer>();
String[] ss = s.split(",");
for(String temp : ss) {
list.add(Integer.parseInt(temp.trim()));
}
System.out.println(list);
datas.add(list);
}
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(ArrayList<Integer> t : datas) {
for(Integer i : t) {
if(map.get(i) == null) {
map.put(i, 1);
} else {
map.put(i, map.get(i) + 1);
}
}
}
System.out.println(map);
}
}
import java.io.*;public class NumberCount { //将数包装一个对象,以便计数
private class NumberObject {
char ch;
int count;
NumberObject(char ch) {
this.ch = ch;
this.count = 1;
}
public void addCount() {
this.count++;
}
public boolean equal(char ch) {
if(this.ch == ch)
return true;
else return false;
}
public String toString() {
return ch+"的个数是:"+count;
}
}
//解析文件 把每一行转换为一char数组,存储在list中
public void parseFile(String fileName,List<char[]> list) {
try {
BufferedReader br = new BufferedReader(new FileReader(new File(fileName)));
String str = null;
while ((str = br.readLine()) != null) {
String[] sarr = str.split(",");
char[] s = new char[sarr.length];
for(int i = 0;i<sarr.length;i++)
s[i] = sarr[i].toCharArray()[0];
list.add(s);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//统计文件中的数字和数字的个数
public void count(List<char[]>list,List<NumberObject> list1) {
int n = 0;
for(int i = 0;i<list.size();i++) {
char[] s = list.get(i);
for(int k = 0;k<s.length;k++) {
for(int j = 0;j<list1.size();j++) {
NumberObject nc = list1.get(j);
if(nc.equal(s[k])) {
nc.addCount();
n = 1;
break;
}
}
if(n == 0) {
NumberObject nc = new NumberObject(s[k]);
list1.add(nc);
}
n = 0;
}
}
}
public static void main(String[] args) {
List<char[]> list = new ArrayList<char[]>();
List<NumberObject> list1 = new ArrayList<NumberObject>();
String fileName = "D:/bb.txt";
NumberCount nc = new NumberCount();
nc.parseFile(fileName, list);
//显示文件中的内容
for(char[] s:list) {
for(int i = 0;i<s.length;i++) {
System.out.print(s[i]);
}
System.out.println();
}
nc.count(list, list1);
for (NumberObject no:list1) {
System.out.println(no);
}
}
}上面程序和题目意思有点不同,我是为了免得麻烦,你自己改改应该没问题
File datafile = new File(filepath);
BufferedReader bis = null;
// 从文件中读取数据
if (datafile.exists()) {
Map<String, Integer> numMap = new HashMap<String, Integer>();
try {
bis = new BufferedReader(new InputStreamReader(
new FileInputStream(datafile)));
String line = null; while ((line = bis.readLine()) != null) {
numMap.put(line.trim(), null);
String[] numbers = line.trim().split(",");
for (String num : numbers) {
int quantity = 1;
if (numMap.containsKey(num))
quantity += numMap.get(num).intValue();
numMap.put(num, quantity);
}
}
} catch (IOException e) {
throw e;
} finally {
if (bis != null)
bis.close();
}
Set<Map.Entry<String, Integer>> numSet = Collections.checkedMap(
numMap, String.class, Integer.class).entrySet();
Iterator<Map.Entry<String, Integer>> iter = null;
Map.Entry<String, Integer> entry = null; // 2.打印数值出现的次数
iter = numSet.iterator();
System.err.println("效果2,打印每一个值出现的次数...");
while (iter.hasNext()) {
entry = iter.next();
if (entry.getValue() == null)
continue;
System.out.println(entry.getKey() + ":出现的次数是:"
+ entry.getValue());
} // 3.打印每一行的数据
iter = numSet.iterator();
System.err.println("效果3,打印每一行的数据保存到数组的形式...");
int i = 0;
iter = numSet.iterator();
while (iter.hasNext()) {
entry = iter.next();
if (entry.getValue() != null)
continue;
System.out.println("s[" + (++i) + "]={" + entry.getKey() + "}");
}
iter = null;
numMap.clear();
numMap = null;
} else
System.err.println("文件不存在...");
}