一:知识的补充( 这个HashMap Map 和 c++的Map还是有非常大的区别,惊人的差异大的人,当然,两者的作用是相同的,但函数名出一个非常大的。即使iterator的差是非常大的 )

(1)HashMap 和 HashTable(c++中仅仅有map木有hashmap的)

HashMap不是线程安全的 

hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,当中键和值都是对象,而且不能包括反复键,但能够包括反复值。HashMap同意null key和null value,而hashtable不同意。

HashTable是线程安全的一个Collection。

(2)HashMap的注意事项

HashMap底层维护一个数组。我们向HashMap中所放置的对象实际上是存储在该数组其中;

向HashMap中put一对键值时,它会依据key的hashCode值计算出一个位置,该位置就是此对象准备往数组中存放的位置。

HashMap应用举例:控制台输入一句英语。简单统计各个单词出现的次数

(3)iterator与c++的不同:第一步:得到key值的集合 Set<String> set = map.keySet();  第二步:用iterator遍历set集合  Iterator<String> iterator = set.iterator; iterator.hashNext();  iterator.next();   第三步:put / get (key) 求得value值   map.containsKey(key)(是否已经包括此keyword)。map.put(key,value)存入键值对。map.get(key)返回key值所相应的value值。

(4)在此,再一次的透露自己的一个拙计的行为:Scanner类自己是第一次用。为什么说拙计呢?是由于自己觉得算是比較早认识学习java的学习java的AWT 、Swing。之后就是javaWe的jsp servelet等等,从第一个java applet的简单的计算公式的编译器開始到五子棋;再到第一个仅仅有jsp + tomcat的javaWeb项目到 眼下用到spring restful的javaWeb项目。

连一个Scanner类或者java控制台输入输出都没有研究过,当然源码更是没有深入过。

(5)总之,再一次的在这里讽刺自己,激励自己,同一时候也给后来人一个忠告!

低调做人高调做事:一定要研究源码级别的,一定要把基础打牢打扎实。

二:控制台输入 统计单词

package edu.tju.cs;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set; public class HashMap3Dimensions { public void mprint(String sentence){
String regex = " ";
String[] words = sentence.split(regex);
Map<String,Integer> map = new HashMap<String,Integer>();
int i;
for(i=0;i<words.length;i++){
if(map.containsKey(words[i])){
// 说明map中,存在该元素
int num = map.get(words[i]);
map.put(words[i], ++num);
}else{
// 第一次key
map.put(words[i], 1);
}
} System.out.println("统计单词出现的个数。结果例如以下:");
Set<String> set = map.keySet();
for(Iterator<String> iterator = set.iterator();iterator.hasNext();){
String key = iterator.next();
Integer value = map.get(key);
System.out.println(key + ":" +value); }
}
// main 入口
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一句话,以进行单词统计():");
String sentence = sc.nextLine();
HashMap3Dimensions hm = new HashMap3Dimensions();
hm.mprint(sentence); }
}

三:java 控制台输入输出小结

Java5加入了java.util.Scanner类,这是一个用于扫描输入文本的新的有用程序。它是曾经的StringTokenizer和Matcher类之间的某种结合。

因为不论什么数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。于是能够结合使用正則表達式和从输入流中检索特定类型数据项的方法。这样。除了能使用正則表達式之外。Scanner类还能够随意地对字符串和基本类型(如int和double)的数据进行分析。借助于Scanner,能够针对不论什么要处理的文本内容编写自己定义的语法分析器。

Scanner是SDK1.5新增的一个类,但是使用该类创建一个对象. Scanner reader=new Scanner(System.in); 

然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型:  

next.Byte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShot()  

上述方法运行时都会造成阻塞,等待用户在命令行输入数据回车确认.比如,拥护在键盘输入12.34,hasNextFloat()的值是true,而hasNextInt()的值是false. NextLine()等待用户输入一个文本行而且回车,该方法得到一个String类型的数据。

从JDK5.0開始。java.util包中添加了Scanner类,它是一个能够使用正則表達式来解析基本类型和字符串的简单文本扫描器。

Scanner类从字面上讲是“扫描”的意思。它把给定的字符串解析成Java的各种基本数据类型,用于分解字符串的默认的分隔符是空格,也能够定制。其构造方法如表7-15。

表7-15 Scanner类的构造方法

方法

描写叙述

Scanner(File source)

Scanner(File source, String charsetName)

构造一个新的 Scanner,其值是从指定文件扫描获得。后者指定了字符集。

Scanner(InputStream source)

Scanner(InputStream source, String charsetName)

构造一个新的 Scanner,其值是从指定的输入流扫描获得。后者指定了字符集。

Scanner(Readable source)

构造一个新的 Scanner。其值是从指定源扫描获得。

Scanner(ReadableByteChannel source)

Scanner(ReadableByteChannel source, String charsetName)

构造一个新的 Scanner,其值是从指定信道扫描获得。

后者指定了字符集。

Scanner(String source)

构造一个新的 Scanner,其值是从指定字符串扫描获得。

由表7-15可见。Scanner能够从指定的文件、输入流、源、信道或字符串等多种来源构造获得。

要从控制台读取数据,使用參数为InputStream的方法,传递标准输入流System.in给它,此时Scanner扫描该输入流中的字符,同一时候还能够让读入的字符串匹配一定的正則表達式模式。假设不匹配时将抛出InputMismatchException异常。

Scanner封装了非常多方法。比方方法next就能够从各种输入流中连续读入字符串。

不仅如此。它还能够读入除char之外的其它七种基本类型和两个大数字类型,而且不须要手工进行转换,如方法nextInt将读入的下一数据转换为int变量,方法nextByte将读入的下一数据转换为byte变量,方法nextLine将读入的下一行转换为String变量。等等。

四:统计csv文件的内容

package edu.tju.cs;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set; public class HashMap3Dimensions {
private Map<String, Integer> originalMap = new HashMap<String, Integer>();
private Map<String, Integer> destinationMap = new HashMap<String, Integer>();
private Map<String, Integer> O_DMap = new HashMap<String, Integer>();
static int original = 1; // original的下标
static int destination = 5; // destination的下标
static String regre = ","; // split 函数的分隔匹配字符 public void mprint(String filePath, String toFilePath){
try {
String encoding="GBK";
File file=new File(filePath);
int cp = 1;
if(file.isFile() && file.exists()){ //推断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file),encoding);//考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read); //写入文件名称处理
String fileName = toFilePath;
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(fileName)));
// 原始一行数据和数据是否须要改变的符号
String originalLine = null;
while((originalLine = bufferedReader.readLine()) != null){
// 字符串分隔
int i = 1;
String tmp[] = originalLine.split(regre);
// 统计各个网站的入度 和 出度
if(tmp.length>5){
// original node
if(originalMap.containsKey(tmp[original])){
int num = originalMap.get(tmp[original]);
originalMap.put(tmp[original], ++num);
}else{
originalMap.put(tmp[original], 1);
}
// destination node
if(destinationMap.containsKey(tmp[destination])){
int num = destinationMap.get(tmp[destination]);
destinationMap.put(tmp[destination], ++num);
}else{
destinationMap.put(tmp[destination], 1);
}
// o_d node
String od = tmp[original] + "," + tmp[destination];
if(O_DMap.containsKey(od)){
int num = O_DMap.get(od);
O_DMap.put(od, ++num);
}else{
O_DMap.put(od, 1);
} }
}
// 关闭写文件
writer.close();
read.close();
}
else
{
System.out.println("找不到指定的文件");
} } catch (Exception e) {
System.out.println("ReadToWrite……读取文件内容出错");
e.printStackTrace();
} // System.out.println("统计单词出现的个数,结果例如以下:");
// Set<String> set = map.keySet();
// for(Iterator<String> iterator = set.iterator();iterator.hasNext();){
// String key = iterator.next();
// Integer value = map.get(key);
// System.out.println(key + ":" +value);
//
// }
}
// main 入口
public static void main(String[] args){
// 源地址和目标地址
String filePath = "D:\\tjdata_metro\\TOKEN_ENEX_201404_20W.csv";
String toFilePath = "D:\\tjdata_metro\\新建目录\\";
HashMap3Dimensions hm = new HashMap3Dimensions();
hm.mprint(filePath,toFilePath); } }

四:java输入和输出控制台摘要

版权声明:本文博主原创文章,博客,未经同意不得转载。

java基金会 之 HashMap统计csvWord文档的更多相关文章

  1. Java 用Freemarker完美导出word文档(带图片)

    Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...

  2. Java jacob调用打印机打印word文档

    前面说了Java如何生成复杂的Word文档,今年记录下Java如何调用打印机打印word文档. 起初用的是自带的PrintJob,但是系统提供的打印机制并不成熟完整.网上的代码也是千篇一律,在我的打印 ...

  3. Java SE之XML<一>XML文档规约

    [文档整理系列] Java SE之XML<一>XML文档规约 1.xml文档引用: 1.外部私有DTD: <!DOCTYPE rootNodeName SYSTEM "ur ...

  4. JAVA - JDK 1.8 API 帮助文档-中文版

    JAVA - JDK 1.8 API 帮助文档-中文版 百度云链接: https://pan.baidu.com/s/1_7FFadw1a6J0qTfx2FzqPQ 密码: 41n4

  5. 中国象棋V2:Java源代码、毕业设计等所有文档,已经全部提交到CSDN-Code平台

    下载地址:https://code.csdn.net/FansUnion/chinesechess-v2 主要内容:Java源代码.毕业设计.API文档.声音图片等资源.Demo截图等一切的一切. 2 ...

  6. 【Java】Java注释 - 单行、块、文档注释

    简单记录,Java 核心技术卷I 基础知识(原书第10 版) 注释 我们在编写程序时,经常需要添加一些注释,用来描述某段代码的作用,提高Java源程序代码的可读性,使得Java程序条理清晰. 写代码的 ...

  7. 统计 Word 文档字数的方式

    描述 欲统计某文档的字数,有两种方式. "审阅"选项卡--"校对"组--字符统计 点击左下角字数统计 审阅查看字数 此步骤较为复杂,在审阅选项卡中可以查询文档的 ...

  8. Java多种方式动态生成doc文档

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5280272.html 本来是要在Android端生成doc的(这需求...),最后方法没有好的方法能够在An ...

  9. 用java语言通过POI实现word文档的按标题提取

    最近有一个项目需要将一个word文档中的数据提取到数据库中.就去网上查了好多资料,最靠谱的就是用poi实现word文档的提取. 喝水不忘挖井人,我查了好多资料就这个最靠谱,我的这篇博客主要是借鉴htt ...

随机推荐

  1. 开源Math.NET基础数学类库使用(12)C#随机数扩展方法

    原文:[原创]开源Math.NET基础数学类库使用(12)C#随机数扩展方法                本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p ...

  2. Oracle 重建索引脚本

    该指数是一个有力的武器,以提高数据库的查询性能. 没有索引,喜欢同样的标签库没有书籍,找书,他们想预订比登天还难.中,尤其是在批量的DML的情形下会产生对应的碎片.以及B树高度会发生对应变化.因此能够 ...

  3. VS2015在对GIT的支持

    VS2015在对GIT的支持 相比VS2013,VS2015在对GIT的支持上有了更强大的支持.本篇仅作抛砖引玉,不做过多介绍: 1. 打开VS 2015起始页 2. 打开团队资源管理器 打开[本地G ...

  4. SQLSERVER PRINT语句的换行

    原文:SQLSERVER PRINT语句的换行 SQLSERVER  PRINT语句的换行 想在输出的PRINT语句里面换行,可以这样做 /* SQL的换行 制表符 CHAR(9) 换行符 CHAR( ...

  5. Swing开发界面时的一个bug复盘

    问题:QA突然发个截图说一个Dialog上展示的东西变形了 分析:不理解,什么也没做,怎么会变形,刚刚我用的时候还正常.看看代码,的确什么也没更改:在本地测一下,也没有问题:baidu,bing,st ...

  6. 【我们都爱Paul Hegarty】斯坦福大学IOS8公开组个人笔记28 ScrollView 幻灯片视图

    随着移动设备,iphone屏幕尺寸的限制.超过内容的屏幕大小为scrollview于,通过滑动来获得.scrollview滑动方向可以是也可以是横向垂直,scrollview可以嵌套,例如,纵向滑动s ...

  7. 日积月累:weightSum和layout_weight属性合用

    解说一:weightSum和layout_weight属性合用 android:weightSum属性:定义weight总和的最大值. 假设为指定该值,全部子视图的layout_weight属性的累加 ...

  8. Sizzle.filter [ 源代码分析 ]

    最近的研究已Sizzle选择,对于原理中我们也不得不佩服! Sizzle中间filter办法.主要负责元素表达式过滤块的集合,在内部的方法调用Sizzle.selector.fitler滤波操作的操作 ...

  9. [SignalR]异常信息捕获以及处理

    原文:[SignalR]异常信息捕获以及处理 异常处理,一般采用try..catch方式处理,而signalR里面有HubPipelineModule类可以捕获到Hub内发生的异常信息. 从上图中,可 ...

  10. Bob大叔观OO原则

    Bob大叔观OO原则 上篇总结了经典的23种 设计模式,详细的解读后期会陆续的详细揭开.使用设计模式的根本原因就是为了增强代码的复用性和可维护性.而面向对象是实现代码复用的有效途径,所以这里有必要了解 ...