java持有对象-map(二)-追踪元素次数
2016-04-12 17:00
731 查看
这篇文章的练习题在面试题中经常考到,关于map的用法也比前篇要深入。
练习一:追踪每一个元音字母出现的次数。
输出式样(我在根目录建立一个vowel.txt内容为:Look at the stars in the sky,that’s all my wishes especiallly for you):
vowel in Look{o=2}
vowel in at{a=1}
vowel in the{e=1}
vowel in stars{a=1}
vowel in in{i=1}
vowel in the{e=1}
vowel in sky{}
vowel in that{a=1}
vowel in s{}
vowel in all{a=1}
vowel in my{}
vowel in wishes{e=1, i=1}
vowel in especiallly{a=1, e=2, i=1}
vowel in for{o=1}
vowel in you{u=1, o=1}
filesta is{a=5, e=5, u=1, i=3, o=4}
练习二:对一个文件中出现的单词计数。使用带有第二参数的String.CASE_INSENTIVE_ORDERED
的Collection.sort()对方法结果进行排序(将产生字母排序),然后显示结果。
输出式样(读取word.txt内容为
think in java
in java
java):
{think=1, java=3, in=2}
总结:第一题如果是我做我会把文件内容切成char,这样符合题目要求,后来我参考书上例子,不仅把统计每一个元音字母出现的次数,还精确统计每个单词元音统计次数,还有就是代码写作风格比我要好太多。
练习一:追踪每一个元音字母出现的次数。
/** * * 书上用了自己编译的一个工具类,但是很奇怪的是通过构造方法能获得list。 * 虽然我大致模拟了工具类效果,但里面代码不知道怎么实现的 * 感觉虽然是一个练习题,但有极强的可扩展性,这一点比我平时编程习惯强太多了 * */ package elevenObject; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; //这是我自己写的工具类,传入一个文件名和你要分割的条件 class TextFile { public List<String> resource(String fileName, String match) { File file = new File(fileName);//创建文件 List<String> results = new ArrayList<String>(); try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line = null; while (!((line = reader.readLine()) == null)) { results.addAll(Arrays.asList(line.split(match))); } reader.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return results; } } public class TestExcFour { //vowel 元音字母集合 private static final Set<Character> vowel = new HashSet<Character>( Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U')); //更新查询结果 static void updataSta(Map<Character, Integer> sta, Character letter) { Character ch = Character.toLowerCase(letter); Integer freq = sta.get(ch); sta.put(ch, freq == null ? 1 : freq + 1);//更新 } public static void main(String[] args) { //单词中元音次数 Map<Character, Integer> fileSta = new HashMap<Character, Integer>(); //文件中元音出现的次数 Map<Character, Integer> worldSta = new HashMap<Character, Integer>(); Set<String> worlds = new HashSet<String>(); //从vowel.txt中以非字母分割,获得一个list集合 for (String word : new TextFile().resource("vowel.txt", "\\W+")) { worldSta.clear(); for (char letter : word.toCharArray()) { if (vowel.contains(letter)) { updataSta(fileSta, letter);//更新文件中 updataSta(worldSta, letter);//更新单词中 } if (!worlds.contains(letter)) { worlds.add(word); } } System.out.println("voel in " + word + worldSta); } System.out.println("filesta is" + fileSta); } }
输出式样(我在根目录建立一个vowel.txt内容为:Look at the stars in the sky,that’s all my wishes especiallly for you):
vowel in Look{o=2}
vowel in at{a=1}
vowel in the{e=1}
vowel in stars{a=1}
vowel in in{i=1}
vowel in the{e=1}
vowel in sky{}
vowel in that{a=1}
vowel in s{}
vowel in all{a=1}
vowel in my{}
vowel in wishes{e=1, i=1}
vowel in especiallly{a=1, e=2, i=1}
vowel in for{o=1}
vowel in you{u=1, o=1}
filesta is{a=5, e=5, u=1, i=3, o=4}
练习二:对一个文件中出现的单词计数。使用带有第二参数的String.CASE_INSENTIVE_ORDERED
的Collection.sort()对方法结果进行排序(将产生字母排序),然后显示结果。
package elevenObject; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class TextExcFive { public static void updataSta(Map<String, Integer> worldSta, String word) { Integer num = worldSta.get(word); worldSta.put(word, num == null ? 1 : num + 1); } public static void main(String[] args) { List<String> world = new ArrayList<>(); Map<String, Integer> worldSta = new HashMap<String, Integer>(); //由于实在同篇文章都调用了TextFile()所以就没有再次copy。 for (String string : new TextFile().resource("word.txt", "\\W+")) { updataSta(worldSta, string); } world.addAll(worldSta.keySet()); Collections.sort(world, String.CASE_INSENSITIVE_ORDER); System.out.println(worldSta); } }
输出式样(读取word.txt内容为
think in java
in java
java):
{think=1, java=3, in=2}
总结:第一题如果是我做我会把文件内容切成char,这样符合题目要求,后来我参考书上例子,不仅把统计每一个元音字母出现的次数,还精确统计每个单词元音统计次数,还有就是代码写作风格比我要好太多。
相关文章推荐
- java四种访问权限修饰符
- 支付宝java后台接入简单流程
- java AES加密
- 关于Java8函数式编程你需要了解的几点
- [Java] 对象排序示例
- Java线程池的那些事
- Spring MVC让Web容器启动时自动执行代码
- Java 多线程处理任务的封装
- java 学习总结(二) 类的接口、继承与多态
- Struts2 入门学习笔记(一)——基本配置
- LeetCode(java)9. Palindrome Number
- Java 实现线程死锁
- 一张图读懂Java多线程
- java 中JDK安装与环境变量配置
- 开发当中日期格式的转换(java语言)
- 远程访问对象java实现
- Java基础之JavaBean
- java中的栈与堆
- eclipse jrebel插件
- 毕向东 Java学习 笔记一