练习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;
} @Override
public 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();
} @Override
public Iterator<AssocitiveArrayEntry<K,V>> iterator() {
return new Iterator<AssocitiveArrayEntry<K,V>>() { private int curIndex; @Override
public boolean hasNext() {
return curIndex<index;
} @Override
public AssocitiveArrayEntry<K,V> next() {
AssocitiveArrayEntry<K,V> ans=new AssocitiveArrayEntry<K,V>((K)pairs[curIndex][0],(V)pairs[curIndex][1]);
curIndex++;
return ans;
} @Override
public 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;
} @Override
public K getKey() {
return key;
} @Override
public V getValue() {
return value;
} @Override
public V setValue(Object value) {
throw new UnsupportedOperationException();
} } }

测试结果如图:

《Thinking in Java》十七章_容器深入研究_练习13(Page484)的更多相关文章

  1. 《Thinking in Java》十七章_容器深入研究_练习12(Page484)

    练习12: 练习使用HashMap / LinkedHashMap / TreeMap import java.util.HashMap; import java.util.LinkedHashMap ...

  2. 《Thinking in Java》十七章_容器深入研究_练习14(Page486)

    练习14 Properties的继承树如下:

  3. “全栈2019”Java多线程第三十七章:如何让等待的线程无法被中断

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  4. “全栈2019”Java多线程第二十七章:Lock获取lock/释放unlock锁

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  5. “全栈2019”Java多线程第十七章:同步锁详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  6. “全栈2019”Java异常第十七章:Error详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  7. “全栈2019”Java第九十七章:在方法中访问局部内部类成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. “全栈2019”Java第八十七章:类中嵌套接口的应用场景(拔高题)

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. “全栈2019”Java第七十七章:抽象内部类与抽象静态内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. Knockout.Js案例二Working With Lists And Collections

    案例一:Foreach绑定 通常,您要生成重复的UI元素,特别是当显示列表,用户可以添加和删除元素.KO.JS让你轻松,使用的数组和foreach绑定. 在接下来的几分钟,您将构建一个动态UI保留席位 ...

  2. Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框

    转载请注明出处http://blog.csdn.net/xiaanming/article/details/11066685 今天给大家带来一个很实用的小控件ClearEditText,就是在Andr ...

  3. Linux新手应掌握的10个基本命令

    导读 Linux对我们的生活有着很大的影响.然而在Linux上,你通常应该使用终端命令,而不是只要点击启动器图像(就像你在Windows上操作那样).这10个基本的Linux命令和重要命令会帮助你尽快 ...

  4. [codevs1380]没有上司的舞会([BZOJ2060][Usaco2010 Nov]Visiting Cows 拜访奶牛)

    [codevs1380]没有上司的舞会 试题描述 Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个快乐指数.现 ...

  5. 字串符相关 split() 字串符分隔 substring() 提取字符串 substr()提取指定数目的字符 parseInt() 函数可解析一个字符串,并返回一个整数。

    split() 方法将字符串分割为字符串数组,并返回此数组. stringObject.split(separator,limit) 我们将按照不同的方式来分割字符串: 使用指定符号分割字符串,代码如 ...

  6. 在Coding.net创建项目开发

    先在Coding上创建个项目 只要建个项目推送代码余额就会增加,积累码币可以在商城里兑换相应的商品.为了码币,我也应该建个项目搞搞啊-  记录下过程. 先在Coding上创建个项目   现在是这样,我 ...

  7. 交叉编译inetutils并配置telnet服务

    inetutils集成了许多网络客户和服务程序,主要有,finger, ftp, ftpd, rcp, rexec, rlogin, rlogind, rsh, rshd, syslog,syslog ...

  8. Objective C 快速入门学习四

    类 1.合成存取器方法 @property   成员变量 @synthesize 成员变量 可以让编译器自动合成 设置和获取函数的方法,不用手动生成set成员变量,Get成员变量 @interface ...

  9. 页面遮罩层,并且阻止页面body滚动。bootstrap模态框原理

    实现思路: 1.需要有一个层将body遮住,放在body上方. 2.修改body的overflow属性值为:hidden 废话不多说了,将关键代码贴出来了,兼容火狐,谷歌,ie 遮罩层的样式代码,红色 ...

  10. ubuntu下查找某个文件的路径

    参考:ubuntu下如何查找某个文件的路径      http://blog.csdn.net/lieyanhaipo/article/details/17055667 在Ubuntu有时候会遇到记得 ...