《Thinking in Java》十七章_容器深入研究_练习13(Page484)
来源:互联网 发布:office激活软件 编辑:程序博客网 时间:2024/05/22 04:24
练习13:
单词计数器
import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.Iterator;import java.util.Map;import org.cc.foo_005.AssocitiveArray.AssocitiveArrayEntry;public class Main {public static void main(String[] args) {String path="D:/test_001/practice_002/1.Harry Potter and the Sorcerer's Stone.txt";AssocitiveArray<String,Integer> ans=wordCount(path);Iterator<AssocitiveArrayEntry<String,Integer>> iter=ans.iterator();while(iter.hasNext()){AssocitiveArrayEntry<String,Integer> o=iter.next();System.out.printf("%s=%d\n",o.getKey(),o.getValue());}}public static AssocitiveArray<String,Integer> wordCount(String filePath){BufferedReader reader=null;AssocitiveArray<String,Integer> res=null;try {reader=new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"UTF-8"));StringBuilder sb=new StringBuilder();while(reader.ready()){sb.append(reader.readLine());}String words[]=sb.toString().split("[(\\s{1,})]");res=new AssocitiveArray<String,Integer>();for(String s:words){if(!"".equals(s)){Integer t=res.get(s);res.put(s,t==null?1:t+1);}}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{try {if(reader!=null) reader.close();} catch (IOException e) {e.printStackTrace();}}return res;}}//关联数组class AssocitiveArray<K, V> implements Iterable {//存储数据private Object pairs[][];//当前最大有效数据的下标+1,即下一个可用位置,类似于栈顶指针private int index;public AssocitiveArray() {this(17);}public AssocitiveArray(int length) {pairs=new Object[length][2];}public void put(K key,V value){//先检查,如果key已经存在的话就直接覆盖掉for(int i=0;i<index;i++){if(key.equals(pairs[i][0])){pairs[i][1]=value;return ;}}//检查是否需要扩充空间if(index==pairs.length) pairs=Arrays.copyOf(pairs,pairs.length*2);pairs[index++]=new Object[]{key,value};}public V get(K key){for(int i=0;i<index;i++){if(key.equals(pairs[i][0])) return (V) pairs[i][1];}return null;}public V remove(K key){for(int i=0;i<index;i++){if(key.equals(pairs[i][0])){V oldValue=(V) pairs[i][1];pairs[i]=pairs[--index];return oldValue;}}return null;}public int size(){return index;}@Overridepublic String toString() {StringBuilder sb=new StringBuilder();sb.append("[");for(int i=0;i<index;i++){sb.append(pairs[i][0]).append(":").append(pairs[i][1].toString());if(i!=pairs.length-1) sb.append(",");}sb.append("]");return sb.toString();}@Overridepublic Iterator<AssocitiveArrayEntry<K,V>> iterator() {return new Iterator<AssocitiveArrayEntry<K,V>>() {private int curIndex;@Overridepublic boolean hasNext() {return curIndex<index;}@Overridepublic AssocitiveArrayEntry<K,V> next() {AssocitiveArrayEntry<K,V> ans=new AssocitiveArrayEntry<K,V>((K)pairs[curIndex][0],(V)pairs[curIndex][1]);curIndex++;return ans;}@Overridepublic void remove() {throw new UnsupportedOperationException();}};}static class AssocitiveArrayEntry<K,V> implements Map.Entry<K,V>{private K key;private V value;public AssocitiveArrayEntry(K key, V value) {super();this.key = key;this.value = value;}@Overridepublic K getKey() {return key;}@Overridepublic V getValue() {return value;}@Overridepublic V setValue(Object value) {throw new UnsupportedOperationException();}}}
0 0
- 《Thinking in Java》十七章_容器深入研究_练习13(Page484)
- 《Thinking in Java》十七章_容器深入研究_练习12(Page484)
- Thinking in Java:容器深入研究
- Thinking in Java 第17章 容器深入研究(17.1-17.7)
- Thinking in Java 第17章 容器深入研究(17.8-17.9)
- Thinking in Java 第17章 容器深入研究(17.10-17.14)
- Thinking in Java——第十七章-容器的深入研究之HashMap篇
- 《 Thinking in Java 》_第2章_一切都是对象_练习题
- 《 Thinking in Java 》_第3章_操作符_练习题
- 《Thinking in JAVA》读书笔记_第二章_2.1
- thingking in Java 容器深入研究
- Think in Java(十四):容器深入研究
- 《Thinking in JAVA》读书笔记_第一章_1.1
- 《Thinking in JAVA》读书笔记_第一章_1.2~1.3
- java基础13_容器_集合_比较器
- Thinking in java 集合容器
- Thinking in JAVA 习题练习
- THINKING IN java(实例练习)
- Prototype
- 七种添加网站链接的简单方法
- 通过python 使用xlrd解析Excel
- Android 监听软键盘的显示与隐藏
- 静态导入
- 《Thinking in Java》十七章_容器深入研究_练习13(Page484)
- Java 控制台实现迷你DVD管理器
- WEB前端-CSS-静态购物页面V3
- 计蒜课挑战难题:罗马数字转换成整数
- 炫酷的底部导航控件——BottomNavigationBar
- MyEclipse中配置struts.xml自动提示
- Debugging SystemVm agents
- #2016多校训练Contest10: 1011 Water problem hdu5867