一:知识的补充( 这个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. hdu 4454 Stealing a Cake(三分之二)

    pid=4454" target="_blank" style="">题目链接:hdu 4454 Stealing a Cake 题目大意:给定 ...

  2. 【C语言探索之旅】 第一部分第四课第二章:变量的世界之变量声明

    内容简介 1.课程大纲 2.第一部分第四课第二章:变量的世界之变量声明 3.第一部分第四课第三章预告:变量的世界之显示变量内容 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布 ...

  3. 不用库(框架),自己写ajax

    平常会使用ajax来请求数据,加载一个库(框架),或许仅仅maybe就使用了它的ajax部分. 写个ajax,一来可以经历一下处理问题的过程,提升技术能力,二来工作中有时真的用不着这么大的一个库(框架 ...

  4. c++内存泄漏处理(积累)

    写c++程序时,常常会出现内存泄漏的问题,这里从网上找了一种非常麻烦的方法:假设想找到每一个cpp文件的内存泄漏,都必须在每一个cpp加上例如以下代码: #include <crtdbg.h&g ...

  5. UVA 1358 - Generator(dp+高斯消元+KMP)

    UVA 1358 - Generator option=com_onlinejudge&Itemid=8&page=show_problem&category=524& ...

  6. 运行safari提示:无法启动此程序,因为计算机中丢失 QTCF.dll

    解决办法: 1.去百度搜索“QTCF.dll”,找到一个靠谱的下载地址获取到该dll文件: 2.将文件放到 安装目录:Safari\Apple Application Support 下边.

  7. Java中finally你知多少

    首先来问大家一个问题:finally 语句块一定会执行吗? 很多人都认为 finally 语句块是肯定要执行的,其中也包括一些很有经验的 Java 程序员.可惜并不像大多人所认为的那样,对于这个问题, ...

  8. Android供TextView添加多个点击文字

    我们使用社会性软件的过程中会或多或少像别人的帖子点,图. : 能够看到用户页面显示出来的仅仅是点了赞的用户的名称,点击这些名称能够进入到该用户的主页.我们就来实现相似的效果.直接上代码吧. @Over ...

  9. 第一pga 畸形消费分析

     第一pga 畸形消费分析 os: aix 6 db:10205 ------使用os 命令观察oracle 存消耗情况 #ps gv ......                         ...

  10. 读改善c#代码157个建议:建议4~6

    目录: 建议4:TryParse比Parse好 建议5:使用int?确保值类型也可以为null 建议6:区别 readonly 和 const 的用法 一.建议4:TryParse比Parse 好 T ...