poj 1002 java_poj1002的java实现

import java.io.BufferedInputStream;    import java.io.DataInputStream;    import java.io.IOException;    import java.util.Iterator;    import java.util.Map;    import java.util.Scanner;    import java.util.Set;    import java.util.TreeMap;    public class Main {       /** * 以下方法主要完成以下功能: * 如果是一个数字,则直接返回,如果只一个字符,则返回它对应的数字 * @param c * @return */     public static char getNum(char c) {                 //如果这个字符是一个数字,则直接返回     if (Character.isDigit(c)) {                return c;            }            //如果这个字符是A或B或C,则返回2.以下规则类似         if (c == 'A' || c == 'B' || c == 'C') {                return '2';            }            if (c == 'D' || c == 'E' || c == 'F') {                return '3';            }            if (c == 'G' || c == 'H' || c == 'I') {                return '4';            }            if (c == 'J' || c == 'K' || c == 'L') {                return '5';            }            if (c == 'M' || c == 'N' || c == 'O') {                return '6';            }            if (c == 'P' || c == 'R' || c == 'S') {                return '7';            }            if (c == 'T' || c == 'U' || c == 'V') {                return '8';            }            if (c == 'W' || c == 'X' || c == 'Y') {                return '9';            }            return '#';        }           public static void main(String[] args) throws IOException {                 //DataInputStream(InputStream in).使用指定的底层 InputStream 创建一个 DataInputStream。      DataInputStream scan = new DataInputStream(new BufferedInputStream(System.in));                 //TreeMap() .使用键的自然顺序构造一个新的、空的树映射。     Map< String, Integer> tm = new TreeMap();               int n = Integer.parseInt(scan.readLine().trim());         for (int i = 0; i < n; i++){                    //将输入号码中的"-"去掉             String s = scan.readLine().replace("-", "");                          StringBuilder sb = new StringBuilder();                for (int k = 0; k < s.length(); k++) {                                 //得到的c可能是数字、#             char c = getNum(s.charAt(k));                                     //isDigit(char ch).确定指定字符是否为数字。                 /**                  * if语句的主要逻辑是:                  * 如果c是数字,则将他加入到标准号码串中                  */             if (Character.isDigit(c)) {                        sb.append(c);                    }                }                             //将字符串转换成标准形式的号码             String result = sb.toString().substring(0, 3) + '-' + sb.toString().substring(3);                             //containsValue(Object value) . 如果此映射为指定值映射一个或多个键,则返回 true。             /**              * if···else主要完成以下逻辑              * 1)判断TreeMap里面是否应含有这个号码,如果有,则将其对应的次数+1.              * 2)如果没有,则将该号码的次数设置为1              */             if (tm.containsKey(result)) {                                 //get(Object key) .返回指定键所映射的值             //,如果对于该键而言,此映射不包含任何映射关系,则返回 null。             int count = tm.get(result) + 1;                    tm.put(result, count);                } else {                //TreeMap中还没有该号码,将该号码的次数设置为1                 tm.put(result, 1);                }            }                     //keySet().返回此映射包含的key的 Set 视图。         Set se = tm.keySet();            Iterator it = se.iterator();            boolean flag = false;            while (it.hasNext()) {                String s = it.next().toString();                int count = tm.get(s);                             /**              * 以下if语句主要完成以下功能:              * 如果出现次数大于1,则将号码及它的出现次数打印出来              */             if (count > 1) {                    flag = true;                    System.out.println(s + " " + count);                }            }                   //如果所有标准形式的号码都没有重复的         //则输出No duplicates.          if (!flag) {                System.out.println("No duplicates. ");            }        }    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值