问题:
小B所在的团队正在开发一个WEB输入内容相似性检测应用,她想到的一种方法是统计用户输入内容中不同单词的出现频率,据此建立一个向量表示用户输入的内容。用户输入的内容已经经过过滤处理,只剩下单词和空格,没有标点符号。各个单词出现频率按从小到大的顺序排列后,即构成了用户输入内容的向量表示。由于用户输入的内容可能很长,单靠人力完全无法找出来。因此小B希望你能帮忙编写一个程序,输出用户内容的向量表达
分析:使用特定数据结构记录重复key
(1)使用HashMap记录重复key,存取效率高,方便。且map可以单独获取key或value的集合。
(2)使用String的字符串分割方法
code:
1 import java.util.Arrays; 2 import java.util.HashMap; 3 import java.util.Map; 4 import java.util.Scanner; 5 6 public class Main { 7 8 public static void main(String[] args) { 9 Scanner s = new Scanner(System.in); 10 while(s.hasNext()) { 11 String str = s.nextLine(); 12 String[] temp = str.split(" "); 13 Map<String,Integer> map = new HashMap<String,Integer>(); 14 /* 15 for(int i=0;i<temp.length;i++) { 16 Integer count = map.get(temp[i]); 17 if(count==null || count ==0) { 18 map.put(temp[i], 1); 19 }else { 20 map.put(temp[i], count+1); 21 } 22 }*/ 23 //改进 24 for(String cont:temp) { 25 if(map.containsKey(cont)) { 26 map.put(cont, map.get(cont)+1); 27 }else { 28 map.put(cont, 1); 29 } 30 } 31 //返回value集合 32 Object[] dp = map.values().toArray(); 33 Arrays.sort(dp); //排序 34 35 //输出前先建造打印结果 36 StringBuilder build = new StringBuilder(""+dp[0]); 37 for(int i=1;i<dp.length;i++) { 38 build.append(" "+dp[i]); 39 } 40 System.out.println(build.toString()); 41 42 } 43 44 } 45 46 }