一:知识的补充( 这个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. sql取整函数

    SQL取整运算2009年04一个月02日本 星期四 10:01有使用说明这种方法记录,就在今天,那么当仍然被遗忘.事实上通常用四舍五入的操作有几种情况,一个是简单的四舍五入,无论是小数点后面的是什么都 ...

  2. ASP.NET2.0组件控件开发视频 初体验

    原文:ASP.NET2.0组件控件开发视频 初体验 ASP.NET2.0组件控件开发视频 初体验 录了视频,质量不是很好,大家体验下.我会重新录制的 如果不清楚,可以看看http://v.youku. ...

  3. 开发一个Swing功能时的一点总结

    对JTextField进行效验,有两个途径:(1)是使用javax.swing.InputVerifier在获取焦点时进行校验(2)在点击“确定”按钮的监听事件中对控件的值进行校验 鉴于涉及的业务比较 ...

  4. 大约Android 了解权限管理

    如Android应用程序开发人员.为android权限机制一直觉得很奇怪.为什么要这个东西权限?为什么要AndroidManifest里面写的uses-permission 这样的事情?我一直搞不清楚 ...

  5. Nancy

    Nancy Nancy 是一个轻量级的,简单粗暴的framework用来构建基于HTTP的各种服务,兼容.Net和Mono.Nancy的整套设计理念是基于"super-duper-happy ...

  6. ROADS+dijkstra的灵活运用+POJ

    ROADS Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10742   Accepted: 3949 Descriptio ...

  7. 基于AVR128单纯Modbus协议实施

    Modbus通信协议Modicon公司1979在发展中,适用于工业现场总线协议控制.Modbus通信系统包含芯片的节点,并与组合物可编程控制的公共传输线,它的目的是收集和监视多个节点的数据.Modbu ...

  8. java内存分析总结

    1.自带的jconsole工具. (1)假设是从命令行启动,使 JDK 在 PATH 上,执行 jconsole 就可以. (2)假设从 GUI shell 启动,找到 JDK 安装路径,打开 bin ...

  9. ExtJS学习笔记:定义extjs类别

    类的定义 Ext.define('Cookbook.Vehicle', { Manufacturer: 'Aston Martin', Model: 'Vanquish', getDetails: f ...

  10. Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)

    一.引言    本套学习笔记的开发环境是Windows 10 专业版和Android Studio 的最新版1.3.1. Android Studio 是一个Android开发环境,基于Intelli ...