字母个数统计程序示例

      本示例是布置给学生作业的参考程序,其他初学者亦可参考。

      程序题目:设计并实现一个程序,读入用户输入的一个字符串,然后确定并打印输出每一个小写元音字母(a、e、i、o、u)在整个字符串中出现的次数。每一个元音字母用不同的计数器统计,同时也打印输出非元音字母的个数。
      依题意,我们只考虑小写字母。这其中的难点是,一个字符串中除了字母,还有空格、标点符号和数字等非字母字符。统计5个元音字母容易实现,但是非元音字母有21个,若写21个判断语句太麻烦;若用字符串长度减去元音字母个数,则忽略了空格、标点符号和数字等非字母字符的情况。因此,本题的关键是如何把统计范围限定在小写字母范围内。为达到这一目的,我们可以使用字符的Unicode编码。小写字母的Unicode编码从97到122,我们获取字符的Unicode编码,然后与以上范围比对,即可判定该字符是否是小写字母。获取字符的Unicode编码很简单,直接把字符强制转换类型为int即可。
      解决了这个关键问题后,解题的思路就清晰了。首先创建两个ArrayList对象,都有6个元素。一个保存5个元音和字母c(代表所有辅音),相对应地,另一个ArrayList对象分别保存对应字母的个数。这里需要注意的是,ArrayList对象不保存基本数据类型,因此在下面的程序中虽然直接对ArrayList对象存取字符和整型值,但实际上执行了自动装箱/拆箱操作。即把字符和整数往ArrayList对象存储时,自动包装成了相应的Character对象和Integer对象;而从中读取时,又自动转换成了相应的char类型和int类型。相关方法的用法,可查阅JAVA API文档。程序如下:
 
 
 
  1. import java.util.Scanner;  
  2. import java.util.ArrayList;  
  3.  
  4. public class LetterStatistics  
  5. {  
  6.     public static void main(String[] args)  
  7.     {  
  8.         //sentence保存用户输入的字符串  
  9.         String sentence = null;  
  10.         //ch保存从字符串中截取的字符  
  11.         char ch = 'a';  
  12.         int index = 0;  
  13.         //unicode保存字符的unicode编码  
  14.         int unicode = 0;  
  15.         int temp = 0;  
  16.         Scanner scan = new Scanner(System.in);        
  17.  
  18.         //保存字母的ArrayList  
  19.         ArrayList<Character> letter = new ArrayList<Character>();  
  20.         //添加5个元音,注意这里有装箱操作,即把  
  21.         //字符包装为对应的Character对象  
  22.         letter.add('a');  
  23.         letter.add('e');  
  24.         letter.add('i');  
  25.         letter.add('o');  
  26.         letter.add('u');  
  27.         //添加字母c,代表所有非元音字母  
  28.         letter.add('c');  
  29.  
  30.         //计数器ArrayList,第0个是字母a的计数器,其它以此类推  
  31.         ArrayList<Integer> counter = new ArrayList<Integer>();  
  32.         //这里同样有装箱操作  
  33.         counter.add(0);  
  34.         counter.add(0);  
  35.         counter.add(0);  
  36.         counter.add(0);  
  37.         counter.add(0);  
  38.         counter.add(0);  
  39.  
  40.         System.out.println("请输入一个字符串:");  
  41.         sentence = scan.nextLine();  
  42.         int length = sentence.length();  
  43.  
  44.         //扫描字符串,提取其中的每个字母来处理  
  45.         for(index = 0; index < length; index++)  
  46.         {  
  47.             //提取下标为index的字符  
  48.             ch = sentence.charAt(index);  
  49.             //获取字符的Unicode编码  
  50.             unicode = (int)ch;  
  51.  
  52.             //只处理小写字母  
  53.             if(unicode <= 122 && unicode >=97)  
  54.             {  
  55.                 switch(ch)  
  56.                 {  
  57.                     case 'a':  
  58.                         //自动拆箱,把Integer类型值自动  
  59.                         //转换为int类型  
  60.                         temp = counter.get(0);  
  61.                         temp++;  
  62.                         //把temp值赋给counter中的第0个元素,  
  63.                         //即元音字母a的计数器。自动装箱,  
  64.                         //把int类型自动包装为Integer类型  
  65.                         counter.set(0, temp);  
  66.                         break;  
  67.  
  68.                     //以下类似  
  69.                     case 'e':  
  70.                         temp = counter.get(1);  
  71.                         temp++;  
  72.                         counter.set(1, temp);  
  73.                         break;  
  74.  
  75.                         case 'i':  
  76.                         temp = counter.get(2);  
  77.                         temp++;  
  78.                         counter.set(2, temp);  
  79.                         break;  
  80.  
  81.                         case 'o':  
  82.                         temp = counter.get(3);  
  83.                         temp++;  
  84.                         counter.set(3, temp);  
  85.                         break;  
  86.  
  87.                         case 'u':  
  88.                         temp = counter.get(4);  
  89.                         temp++;  
  90.                         counter.set(4, temp);  
  91.                         break;  
  92.  
  93.                         default:  
  94.                         temp = counter.get(5);  
  95.                         temp++;  
  96.                         counter.set(5, temp);                         
  97.                 }  
  98.  
  99.             }  
  100.             else 
  101.             {  
  102.                 //若当前字符不是小写字母,则不做任何处理,  
  103.                 //继续下次循环,处理下一个字符  
  104.                 continue;  
  105.             }  
  106.         }  
  107.        
  108.         length = counter.size();  
  109.  
  110.         //打印输出各种字母的个数  
  111.         for(index = 0; index < length - 1; index++)  
  112.         {  
  113.             System.out.println("字符串中元音"   
  114.                                + letter.get(index)  
  115.                                + "的个数是:" 
  116.                                + counter.get(index)  
  117.                                + "。");  
  118.         }  
  119.  
  120.         System.out.println("辅音的个数是:" + counter.get(index));  
  121.     }  

 

运行结果示例:
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值