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. "); } } }
poj 1002 java_poj1002的java实现
最新推荐文章于 2021-09-16 11:29:38 发布