这篇文章主要为大家详细介绍了Java如何利用Map集合实现计算文本中字符个数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
一、题目要求
有一个英文的文本文档a.txt , 需要读取该文本文档并计算文档中英文字符出现的次数,最后打印输出
注意:map集合只能放入英文字符,不能够有空格数字引号等字符,所以在写代码的时候需要额外的进行判断,还需要考虑的一点是英文字符是有大小写的,但是统计在map里面就不区分大小写
二、分析
1、需要先获取文档的路径,并创建HashMap作为存放次数的容器,key的类型为Character存放字符,value的类型为Integer存放次数
2、通过文档输入流读取文档中的内容,得到一串字符串
3、遍历字符串,获得字符串中每一个字符
4、判断字符在map集合中是否存在
5、不存在则将其放入
6、存在则将map集合中字符key对应的次数value取出,然后加一,再通过put方法重新放回,起到更新次数的效果
三、部分代码展示
1、创建Map列表及文件路径
FileInputStream fis = null;
HashMap<Character, Integer> map = new HashMap<>();
2、获得文本中的内容并返回为字符串
while ((len = fis.read(b))!=-1){
// 获得文件中的字符串
s = new String(b, 0, len);
}
3、遍历字符串并获得每个字符再进行相关判断后放入map集合中
// 遍历字符串得到每一个字符
for (int i = 0; i < s.length() ; i++) {
char c = s.charAt(i);
// 判断是否是字母
if ( ((c>='a')&&(c<='z')) || ((c>='A')&&(c<='Z'))){
// 将字母转换为小写
char nc = Character.toLowerCase(c);
// 判断map集合中是否有该键
if (map.containsKey(nc)){
Integer num = map.get(nc);
num++;
map.put(nc,num);
}else {
map.put(nc,1);
}
}
}
4、遍历map集合得到数据
// 遍历map集合得到数据
Set<Character> key = map.keySet();
for (Character c : key) {
Integer value = map.get(c);
System.out.println("key="+c+"----"+"value="+value);
}
四、全部代码
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class totalNum {
public static void main(String[] args) throws IOException {
// todo 统计字母出现的次数
FileInputStream fis = null;
String s = null;
HashMap<Character, Integer> map = new HashMap<>();
try {
fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-25\\src\\a1\\a.txt");
byte[] b = new byte[1024];
int len = 0;
while ((len = fis.read(b))!=-1){
// 获得文件中的字符串
s = new String(b, 0, len);
}
// 遍历字符串得到每一个字符
for (int i = 0; i < s.length() ; i++) {
char c = s.charAt(i);
// 判断是否是字母
if ( ((c>='a')&&(c<='z')) || ((c>='A')&&(c<='Z'))){
// 将字母转换为小写
char nc = Character.toLowerCase(c);
// 判断map集合中是否有该键
if (map.containsKey(nc)){
Integer num = map.get(nc);
num++;
map.put(nc,num);
}else {
map.put(nc,1);
}
}
}
// 遍历map集合得到数据
Set<Character> key = map.keySet();
for (Character c : key) {
Integer value = map.get(c);
System.out.println("key="+c+"----"+"value="+value);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
fis.close();
}
}
}
五、结果截图(部分)
六、a.txt文本
I am happy to join with you. today in what will go down in history ,as the greatest demonstration for freedom in the history of our nation…
Five score years ago, a great American, in whose symbolic shadow we stand today, signed the Emancipation Proclamation. This momentous decree came as a great beacon light of hope to millions of Negro slaves who had been seared in the flames of withering injustice. It came as a joyous daybreak to end the long night of bad captivity.
到此这篇关于Java利用Map实现计算文本中字符个数的文章就介绍到这了,更多相关Java计算文本字符个数内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Java利用Map实现计算文本中字符个数
基础教程推荐
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- 降序排序:Java Map 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01