一道题,答案自己写出来的,感觉写的特别的不好,希望大神指正!(习惯不好哈.没有加注释.看的比较累...)
[Java] 纯文本查看 复制代码 package demo237;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
/*
* 统计字符个数程序:
1. 在项目根路径下创建文件”data.txt”,用于存放统计的字符个数
2. 使用键盘录入一个字符串,获取字符串中每一个字符出现的个数,并将统计结果存入”data.txt”文件中,要求如下:
2.1 如键盘录入的字符在文件中也存在,统计结果需累加键盘录入个数和文件存在个数
2.2 要求统计结果格式为: 字符:个数并以”,”连接,末尾处不需要”,”结尾,
如:a:5,b:4,c:3,d:2
2.3 不将”:”和”,”作为统计字符
*/
public class Test2 {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一组英文小写数字:");
String line = sc.nextLine();
sc.close();
// 定义接收键盘接收HashMap集合hs
HashMap<Character, Integer> hs = new HashMap<Character, Integer>();
char[] chs = line.toCharArray();
for (char c : chs) {
Integer i = hs.get(c);// hs.containsKey(key) 判断是否存在该值
if (i == null) {
hs.put(c, 1);
} else {
i++;
hs.put(c, i);
}
}
//System.out.println("输入的累加:" + hs);
BufferedReader br = new BufferedReader(new FileReader("data.txt"));
String brString = br.readLine();
br.close();
// 定义接收文件接收HashMap集合 hashMap
HashMap<Character, Integer> hashMap = new HashMap<Character, Integer>();
// 定义拼接数组
StringBuilder sb = new StringBuilder();
if (!(brString == null)) {
splitString(brString, hashMap);
//System.out.println(hashMap);
// 遍历集合累加
if (hs.size() > hashMap.size()) {
Set<Character> keySet = hs.keySet();
for (Character key : keySet) {
if (hashMap.containsKey(key)) {
int i = hs.get(key) + hashMap.get(key);
sb.append(key).append(":").append(i).append(",");
} else {
sb.append(key).append(":").append(hs.get(key)).append(",");
}
}
} else {
Set<Character> keySet = hashMap.keySet();
for (Character key : keySet) {
if (hs.containsKey(key)) {
int i = hs.get(key) + hashMap.get(key);
sb.append(key).append(":").append(i).append(",");
} else {
sb.append(key).append(":").append(hashMap.get(key)).append(",");
}
}
}
} else {
Set<Character> keySet = hs.keySet();
for (Character key : keySet) {
sb.append(key).append(":").append(hs.get(key)).append(",");
}
}
String sbNew = sb.substring(0, sb.length() - 1);
//System.out.println(sbNew);
BufferedWriter bw = new BufferedWriter(new FileWriter("data.txt"));
bw.write(sbNew);
bw.close();
System.out.println("文件输出成功!");
}
private static void splitString(String brString, HashMap<Character, Integer> hashMap) {
String[] split = brString.trim().split(",");
//System.out.println(Arrays.toString(split));
for (String string : split) {
// String trim = string.trim();
char key = string.substring(0, 1).charAt(0);
// int i = trim.lastIndexOf(":");
String s2 = string.substring(string.lastIndexOf(":") + 1, string.length());
//System.out.println(key);
Integer value = Integer.valueOf(s2);
//System.out.println(value);
hashMap.put(key, value);
}
}
}
|