- 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());
- }
- }
复制代码 |