字母個數統計程序示例

      本示例是佈置給學生做業的參考程序,其餘初學者亦可參考。java

      程序題目:設計並實現一個程序,讀入用戶輸入的一個字符串,而後肯定並打印輸出每個小寫元音字母(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.     }  

 

運行結果示例:
 

相關文章
相關標籤/搜索