黑马程序员技术交流社区

标题: 取出一个字符串中字母出现的次数 [打印本页]

作者: 段燚涛    时间: 2015-8-7 13:11
标题: 取出一个字符串中字母出现的次数
  1. package com.itheima;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.util.Arrays;

  6. /**
  7. * 1、 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)...
  8. * ****************************************************************************************
  9. *--注:在本题中,考虑到字母大小写。
  10. *
  11. *思路:
  12. *1.通过字符缓冲流对象BufferedReader的readLine()方法获取输入并需要判断的一行字符串。
  13. *2.定义一个新的字符串,判断这个输入的字符串中包含字母的个数。并把其中是字母的字符存入新的字符串中。
  14. *3.定义一个二维字符数组:其中第一行代表字符,第二行代表这个字符出现的次数。遍历这个新的字符串,
  15. *   把字符出现的次数进行累加。
  16. *4.对这个数组结果进行统计并输出。使用StringBuilder输出。(如果第二行(出现次数)不为0,则输出)
  17. */
  18. public class Test_1 {
  19.         public static void main(String[] args) {
  20.                
  21.                 //①步骤一:1.通过字符缓冲流对象BufferedReader的readLine()方法获取需要判断的一行字符串。

  22.                 //提示用户输入字符串。
  23.                 System.out.println("请输入需要判断的字符串:");
  24.                 //定义需要判断的字符串
  25.                 String str = null;
  26.                 //定义字符读取工具:br
  27.                 BufferedReader br = null;
  28.                 try {
  29.                         //创建字符缓冲流对象
  30.                         br = new BufferedReader(new InputStreamReader(System.in));
  31.                         //通过字符缓冲流对象的readLine()方法读取一行字符输入,并赋值给str。
  32.                         str = br.readLine();
  33.                 } catch (IOException e) {
  34.                         new RuntimeException("字符串获取失败!");
  35.                 } finally {
  36.                         try {
  37.                                 br.close();//关闭资源
  38.                         } catch (Exception e2) {
  39.                                 new RuntimeException("字符串读取资源:br 关闭失败!");
  40.                         }
  41.                 }
  42.                
  43.                
  44.                 //②步骤二:2.定义一个新的字符串,判断这个输入的字符串中包含字母的个数。并把其中是字母的字符存入新的字符串中。
  45.                 //定义新的字符串
  46.                 String newStr = null;
  47.                 //定义一个零时的StringBuilder对象,用于缓存新的字符串。
  48.                 StringBuilder sb = new StringBuilder();
  49.                 //遍历输入的字符串中的每一个字符。
  50.                 for (int i = 0; i < str.length(); i++) {
  51.                         //取出字符串中的每个字符
  52.                         char ch = str.charAt(i);
  53.                         //判断字符是否是字母
  54.                         if((ch>=65&&ch<=90)||(ch>=97&&ch<=122)){
  55.                                 //如果是字母,则将其添加到sb中。
  56.                                 sb.append(ch);
  57.                         }
  58.                 }
  59.                 //将sb的字符串形式赋值给newStr
  60.                 newStr = sb.toString();
  61.                
  62.                
  63.                 //③步骤三:3.定义一个二维字符数组:其中第一行代表字符,第二行代表这个字符出现的次数。遍历这个新的字符串newStr,
  64.             //   把字符出现的次数进行累加。
  65.                 //定义包含所有字母的二维数组,第一行代表字符,第二行代表出现的次数
  66.                 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'} };
  67.                
  68.                 //遍历这个新的字符
  69.                 for (int m = 0; m < newStr.length(); m++) {
  70.                         //获取新字符串中的每个字符
  71.                         char ch = newStr.charAt(m);
  72.                         for (int i = 0; i < chars[0].length; i++) {//循环遍历二维数组中第一行每一个字符与ch是否相等。
  73.                                 if(ch==chars[0][i]){//如果相等
  74.                                         chars[1][i] +=1;//则在二维数组的第二行进行累加1操作.
  75.                                 }
  76.                         }
  77.                 }
  78.                
  79.                 //④步骤四:4.对这个数组结果进行统计并输出。使用StrinBuilder输出。(如果第二行代表出现次数不为0,则输出)
  80.                 //定义输出的字符缓存。
  81.                 StringBuilder outSb = new StringBuilder();
  82.                
  83.                 for (int i = 0; i < chars[1].length; i++) {//循环遍历这个数组的第二行(出现次数)
  84.                         if(chars[1][i]!='0'){//如果次数不为0
  85.                                 outSb.append(chars[0][i]+"("+chars[1][i]+")");//则进行字符串拼接。
  86.                         }
  87.                 }
  88.                 System.out.println("输入结果为:");
  89.                 //输出这个组合的字符串。
  90.                 System.out.println(outSb.toString());
  91.         }
  92. }
复制代码

作者: 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