黑马程序员技术交流社区

标题: 统计字符串中的每个字母出现次数—— 为什么没有结果 [打印本页]

作者: 王延龙    时间: 2013-7-26 01:14
标题: 统计字符串中的每个字母出现次数—— 为什么没有结果
本帖最后由 杨兴庭 于 2013-7-29 11:03 编辑

  1. import java.util.Scanner;

  2. /*
  3. * 实现需求:统计字符串中的每个字母出现次数,字符串有用户输入;统计在忽略字母大小写的情况下,每个字母出现的次数
  4. *
  5. * 解决思路:
  6. * 1.获取字符串        Scanner方法
  7. * 2.将字符串中的大写换成小写字母 toLowerCase()方法
  8. * 3.定义一个countLetter()方法来实现统计功能
  9. *                 3.1 创建一个长度为26的数组
  10. *                 3.2 获取字符串中的字符charAt()
  11. *                 3.3 确定该字符对应的计数器:通过该字符与'a'的距离来判断
  12. *                 
  13. * 4.显示打印结果
  14. *                 4.1将该字符与'a'的距离转换成字母;
  15. */
  16. public class CountEachLetter {

  17.         /**
  18.          * @param args
  19.          */
  20.         public static void main(String[] args) {

  21.                 //1.获取字符串
  22.                 Scanner input = new Scanner(System.in);
  23.                
  24.                 System.out.println("输入一组字符:");
  25.                
  26.                 String s = input.nextLine();
  27.                
  28.                 //2.将字符串转换为小写字符作为参数,调用countLetters()方法来实现功能:统计字母出现次数
  29.                
  30.                 int[] counts = countLetters(s.toLowerCase());
  31.                
  32.                 //3.显示打印结果
  33.                
  34.                 for(int i = 0; i < counts.length; i++){
  35.                         
  36.                         if(counts[i] != 0){
  37.                                 
  38.                                 System.out.println((char)('a'+i)+"-出现次数-"+counts[i]);
  39.                         }
  40.                 }
  41.         }

  42.         //定义countLetters()方法,封装统计功能
  43.         private static int[] countLetters(String s) {
  44.                 //创建一个元素为26的数组容器
  45.                 int[] counts = new int[26];
  46.                 //遍历字符串
  47.                 for(int i = 0; i < s.length(); i++){
  48.                         //如果字符为字母;其相应的计数器数组元素加1;
  49.                         if(Character.isLetter(s.charAt(i)))
  50.                                 //以查询字母的统一码 为对应标识
  51.                                 counts[s.charAt(i) - 'a']++;
  52.                 }
  53.                
  54.                 return counts;
  55.         }

  56. }
复制代码
可不可以有更简单的方法

作者: 草貌路飞    时间: 2013-7-26 01:49
没有结果?我运行是有的呀..不知道有没有更简单的方法,但经常用的是Map,把字符作为key,次数为value,第一次put,value为1,后面就是如果map里有的话取出来++在put进去。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2