黑马程序员技术交流社区
标题:
取出一个字符串中字母出现的次数
[打印本页]
作者:
段燚涛
时间:
2015-8-7 13:11
标题:
取出一个字符串中字母出现的次数
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());
}
}
复制代码
作者:
fmi110
时间:
2015-8-7 14:44
使用集合map来进行TreeMap<char,int> 来替换二维数组,实现起来要方便一些
作者:
rxtm
时间:
2015-8-7 16:15
用map就好了,这个看着太麻烦
作者:
cemabenteng
时间:
2015-8-7 19:24
这道题的通用做法就是用map来做,character做键,Integer做值
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2