黑马程序员技术交流社区
标题:
怎么做这个题?
[打印本页]
作者:
trj1123131766
时间:
2015-8-6 23:37
标题:
怎么做这个题?
"cbxzbvavdvgd"获取字符串中,每一个字母出现次数:"a(1)b(2)c(1)d(2)g(1)v(3)x(1)z(1)"
作者:
大头爱傻瓜
时间:
2015-8-6 23:44
你可以用String的indexof获取每个字符串的第一个出现的位置,然后将剩余的字符串切割出来再查找,再来个计数累加,不知道说的对不对,大神勿喷
作者:
M1992
时间:
2015-8-6 23:52
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class Test1 {
public static void main(String[] args){
String str = "abcdekka27qoq";
String char_count = getCharCount(str);
System.out.println(char_count);
}
public static String getCharCount(String str) {
char[] chs = str.toCharArray(); //将字符串转成字符数组
Map<Character,Integer> map = new TreeMap<Character,Integer>(); //定义map集合
for (int i = 0; i < chs.length; i++) { //遍历字符数组,获取每一个字母
if(!(chs[i] >= 'a' && chs[i] <= 'z')){ //过滤掉非字母字符
if(!(chs[i] >= 'A' && chs[i] <= 'Z')){
continue;
}
}
Integer value = map.get(chs[i]); //将遍历到的字母作为键去查表,获取值
int count = 0; //用于记录次数
if(value != null){ //判断次数是否存在
count = value; //存在,就用count记录次数
}
count++; //次数不存在,就不记录,只对count自增变成1
map.put(chs[i], count); //将字符和次数进行存储
}
return toString(map);
}
public static String toString(Map<Character, Integer> map) {
StringBuilder sb = new StringBuilder(); //使用缓冲区
Set<Character> keySet = map.keySet(); //将map集合转变成set集合
for (Iterator<Character> it = keySet.iterator(); it.hasNext();) { //通过迭代器,取出map集合中的元素
Character key = it.next();
Integer value = map.get(key);
sb.append(key+"("+value+")");
}
return sb.toString();
}
}
作者:
玉质彼端
时间:
2015-8-6 23:53
我的思路是:遍历字符串中每一个字符,将字符放到一种容器里面以便统计。
String s = "cbxzbvavdvgd";
Map<Character, Integer> map = new HashMap<Character, Integer>();
Character c = null;
for (int i = 0; i < s.length(); i++) {
c = s.charAt(i);
if (map.get(c) == null) { //第一次遇到这个字符
map.put(c, 1);
} else { //多次遇到这个字符,累计之
map.put(c, map.get(c) + 1);
}
}
// 最后遍历map,输出结果
for (Character ch : map.keySet()) {
System.out.print(ch+"("+map.get(ch)+")");
}
复制代码
作者:
真实姓名被注册
时间:
2015-8-7 00:16
当然是用TreeMap集合了
作者:
玉质彼端
时间:
2015-8-7 00:25
啊,原来还有TreeMap这么神奇的容器,TreeMap还带自动排序功效,感谢楼主此题以及各位学长的指点,我仍需努力。。
作者:
章浩
时间:
2015-8-7 00:30
map经典题 老毕视频里面有 必须会
作者:
段燚涛
时间:
2015-8-7 12:58
package com.itheima;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
/**
* 1、 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)...
* ****************************************************************************************
*--注:在本题中,考虑到字母大小写。
*
*思路:
*1.通过字符缓冲流对象BufferedReader的readLine()方法获取输入并需要判断的一行字符串。
*2.定义一个新的字符串,判断这个输入的字符串中包含字母的个数。并把其中是字母的字符存入新的字符串中。
*3.定义一个二维字符数组:其中第一行代表字符,第二行代表这个字符出现的次数。遍历这个新的字符串,
* 把字符出现的次数进行累加。
*4.对这个数组结果进行统计并输出。使用StringBuilder输出。(如果第二行(出现次数)不为0,则输出)
*/
public class Test_1 {
public static void main(String[] args) {
//①步骤一:1.通过字符缓冲流对象BufferedReader的readLine()方法获取需要判断的一行字符串。
//提示用户输入字符串。
System.out.println("请输入需要判断的字符串:");
//定义需要判断的字符串
String str = null;
//定义字符读取工具:br
BufferedReader br = null;
try {
//创建字符缓冲流对象
br = new BufferedReader(new InputStreamReader(System.in));
//通过字符缓冲流对象的readLine()方法读取一行字符输入,并赋值给str。
str = br.readLine();
} catch (IOException e) {
new RuntimeException("字符串获取失败!");
} finally {
try {
br.close();//关闭资源
} catch (Exception e2) {
new RuntimeException("字符串读取资源:br 关闭失败!");
}
}
//②步骤二:2.定义一个新的字符串,判断这个输入的字符串中包含字母的个数。并把其中是字母的字符存入新的字符串中。
//定义新的字符串
String newStr = null;
//定义一个零时的StringBuilder对象,用于缓存新的字符串。
StringBuilder sb = new StringBuilder();
//遍历输入的字符串中的每一个字符。
for (int i = 0; i < str.length(); i++) {
//取出字符串中的每个字符
char ch = str.charAt(i);
//判断字符是否是字母
if((ch>=65&&ch<=90)||(ch>=97&&ch<=122)){
//如果是字母,则将其添加到sb中。
sb.append(ch);
}
}
//将sb的字符串形式赋值给newStr
newStr = sb.toString();
//③步骤三:3.定义一个二维字符数组:其中第一行代表字符,第二行代表这个字符出现的次数。遍历这个新的字符串newStr,
// 把字符出现的次数进行累加。
//定义包含所有字母的二维数组,第一行代表字符,第二行代表出现的次数
char[][] chars = new char[][] { {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'},{'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'} };
//遍历这个新的字符
for (int m = 0; m < newStr.length(); m++) {
//获取新字符串中的每个字符
char ch = newStr.charAt(m);
for (int i = 0; i < chars[0].length; i++) {//循环遍历二维数组中第一行每一个字符与ch是否相等。
if(ch==chars[0][i]){//如果相等
chars[1][i] +=1;//则在二维数组的第二行进行累加1操作.
}
}
}
//④步骤四:4.对这个数组结果进行统计并输出。使用StrinBuilder输出。(如果第二行代表出现次数不为0,则输出)
//定义输出的字符缓存。
StringBuilder outSb = new StringBuilder();
for (int i = 0; i < chars[1].length; i++) {//循环遍历这个数组的第二行(出现次数)
if(chars[1][i]!='0'){//如果次数不为0
outSb.append(chars[0][i]+"("+chars[1][i]+")");//则进行字符串拼接。
}
}
System.out.println("输入结果为:");
//输出这个组合的字符串。
System.out.println(outSb.toString());
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2