在一段英文字母中找出每个字母重复数量的方法(Java)

首先需要了解下java的hashmap数据类型:

hashmap是基于哈希表的Map接口的实现。hashmap有两个元素,一个是key(键名),一个是value(键值),就相当于一个字典了,和Python里的字典是一样的。

在一段英文字母中找出每个字母重复数量的实现原理:

将文字中出现的字母,作为键名(key),出现的次数作为键值(value),hashmap中的键名是不能重复的,那么统计这些字母的数量,就变成了统计这些相同键名的数量。

实现方式可以是从第一个字母开始,把字母存到哈希表中去,第一个就是a:1,然后按顺序存第2个字母f:1,如果出现跟前面有的字母重复的话,前面字母的键值就+1,例如afa,遍历到第3个字母的时候,a的键值就变成了2,即a:2,如果遇到空格数字,标点符号,及其他特殊字符就排除掉,不插入,如果遇到标点符号也统计则不需要判断条件,全部都插入即可。

代码如下:

 1 import java.util.HashMap;
 2  3
 4 public class hashmap_examp {
 5
 6     public static void main(String[] args){
 7         HashMap<String,Integer> map = new HashMap<String,Integer>();
 8         String str="afashfjgjkhlnmash,^566*整数gshkjshgksdfsgdfhjk";
 9         for (int i=0;i<str.length();i++){
10             char c=str.charAt(i);
11             String key=String.valueOf(c);
12             if(map.containsKey(key)){
13                 Integer value=map.get(key);
14                 map.put(key, value+1);
15             }
16             else{
17                 //map.put(key, 1); 统计所有的字符,包括中文
18                 if(c>=‘A‘&&c<=‘Z‘||c>=‘a‘&&c<=‘z‘){//利用ascii码去除字符串的数字,空格,标点符号,特殊字符
19                     map.put(key, 1);
20                 }
21             }
22         }
23         System.out.println(map);
24     }
25 }

输出结果:

{f=4, g=4, d=2, s=6, a=3, n=1, l=1, m=1, j=4, k=4, h=6}

时间: 2024-08-26 14:18:05

在一段英文字母中找出每个字母重复数量的方法(Java)的相关文章

一句话的代码,从集合中找出第一个重复字符的方法javascript版。

有的时候需求是这样的: 找出集合中第一个重复的字符所在的位置,刚才看了园内某自许为算法的代码,感觉非常之啰嗦故写了以下代码! 本人对神马算法之类的完全不懂,但那些伪算法家们也别出来装蒜.一句话:不要欺负俺没文化好不好! 别的不说看代码: Array.prototype.searchFirstNotRepeat = function () { var curArr = this, val; while (-1 == (val = curArr.indexOf(curArr.shift())));

C语言:对传入sp的字符进行统计,三组两个相连字母“ea”&quot;ou&quot;&quot;iu&quot;出现的次数,并将统计结果存入ct所指的数组中。-在数组中找出最小值,并与第一个元素交换位置。

//对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中. 1 #include <stdio.h> 2 #include <string.h> 3 #pragma warning (disable:4996) 4 void fun(char*sp ,int *ct) 5 { 6 int a=0, b=0, c=0; 7 while (*sp != '\0') 8 { 9 if (*s

[LeetCode] 在一堆字符串中找出包含相同字符的 group的较快方法,题 Anagrams

题目: Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be in lower-case. class Solution { public: vector<string> anagrams(vector<string> &strs) { } }; 题意本身并不是很清晰,开始我的代码总是报Output Limit Exceeded,

华为机试—字符串中找出单词排序

题目: 在给定字符串中找出单词( "单词"由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格.问号.数字等等:另外单个字母不算单词):找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中:如果某个单词重复出现多次,则只输出一次:如果整个输入的字符串中没有找到单词,请输出空串.输出的单词之间使用一个"空格"隔开,最后一个单词后不加空格. 要求实现函数: void my_word(charinput

华为机试—给定字符串中找出单词

题目: 在给定字符串中找出单词("单词"由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格.问号.数字等等:另外单个字母不算单词):找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中:如果某个单词重复出现多次,则只输出一次:如果整个输入的字符串中没有找到单词,请输出空串.输出的单词之间使用一个"空格"隔开,最后一个单词后不加空格. 要求实现函数: void my_word(charinput[

C语言:从p所指字符串中找出ASCII码最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。

//fun函数:从p所指字符串中找出ASCII码最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动. 1 #include <stdio.h> 2 void fun( char *p ) 3 { char max,*q; int i=0; 4 max=p[i]; 5 while( p[i]!=0 ) 6 { if( max<p[i] ) 7 { max=p[i]; 8 /**********found**********/ 9 q = p + i;//先找到最大值,记录最

一篇英文文档中找出频数最多的10个单词

"""一篇英文文档中找出频数最多的10个单词collections: Counter 提供计数器工具以支持方便和快速的计数 most_common(n) 返回n个最常见元素及其计数的列表,从最常见到最少. 如果省略nNone,则 most_common()返回计数器中的所有元素."""import refrom collections import Counter# print(dir(Counter))with open('english.tx

【c语言】第一个只出现一次的字符题目:在字符串中找出第一个只出现一次的字符

// 第一个只出现一次的字符题目:在字符串中找出第一个只出现一次的字符. // 如输入"abaccdeff",则输出'b'. #include <stdio.h> #include <string.h> char find_one(char *str) { int a[256]; int len = strlen(str); int i = 0; memset(a, 0, sizeof(a)); for (i = 0; i<len; i++) { a[st

[面试题]在数组中找出3个数使得它们和为0

给定一个数组S,试找出3个数a, b, c,使得a+b+c=0.也即从集合中找出所有的和为0的3个数. 例如:集合S={-1,0, 1, 2, -1, 4},则满足条件的3个数有2对:(-1, 0, 1)和(-1, 2, -1).注意(-1,1,0)与(-1,0,1)算同一个解,所以不用重复考虑. 当然该例子集合的解也可以写成:(0, 1, -1)和(2, -1, -1). 参考了:http://blog.csdn.net/wangran51/article/details/8858398,他给