黑马程序员技术交流社区

标题: 新手练习题求大神指正(1) [打印本页]

作者: luchatex    时间: 2016-9-21 17:51
标题: 新手练习题求大神指正(1)
一道题,答案自己写出来的,感觉写的特别的不好,希望大神指正!(习惯不好哈.没有加注释.看的比较累...)

[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);
                }
        }
}

作者: 水月灬清影    时间: 2016-9-22 15:15
你看看吧……
[Java] 纯文本查看 复制代码
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;


public class Demo1 {
                public static void main(String[] args) throws IOException {
                        TreeMap<Character,Integer> map = new TreeMap<Character,Integer>();
                        BufferedReader br = new BufferedReader(new FileReader("data.txt"));
                        String srcLine = br.readLine();
                        String[] srcLs=srcLine.split(",");
                        for(String s:srcLs){
                                map.put(s.charAt(0), Integer.parseInt(Character.toString(s.charAt(2))));
                        }
                        Scanner sc = new Scanner(System.in);
                        //请输入字符串
                        System.out.println("请输入字符串");
                        String line = sc.nextLine();
                        char[] chs = line.toCharArray();
                        for(int i = 0 ;i<chs.length;i++){
                                if(Character.isLetter(chs)){
                                        Integer value=map.get(chs);
                                        if(value==null){
                                                map.put(chs, 1);
                                        }else{
                                                map.put(chs, ++value);
                                        }
                                }
                        }
                        StringBuilder sb=new StringBuilder();
                        Set<Character> keys=map.keySet();
                       
                        for(Character key:keys){
                                sb.append(key+":"+map.get(key)+",");
                        }
                        sb.deleteCharAt(sb.length()-1);  //删除末尾逗号
                        System.out.println(sb.toString());
                        PrintWriter pw = new PrintWriter("data.txt");
                        pw.println(sb.toString());
                        pw.close();
                }
}

作者: luchatex    时间: 2016-9-22 23:24
感谢大神赐教~向你学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2