看到一個面試題,突發奇想總結下統計字符串中字母出現次數的相關問題。 一、統計字符串中出現的字母及其出現次數 直接上代碼
@Test public void test() { getNums("aaacc好啊accjjj1jjkJkkoo"); } public static void getNums(String str) { int[] nums = new int[26]; //遍歷str中的每個字符 for(char i : str.toCharArray()) { //在a-z之間 if(i >= 97 && i <= 123) { //計數 nums[i - 97]++; } } //統計字符串中出現的所有字母和個數 for(int i = 0; i<nums.length; i++) { if(nums[i] != 0) { char j = (char) (i + 97); System.out.注意:此方法僅能過濾掉字符串中的數字、漢字,不能把大寫字母轉化成小寫字母合起來統計次數,此為遺憾。二、統計字符串中出現的字母及其出現次數,并輸出首次出現該字母的索引位置。 這里將(一)中的代碼稍微修改成二維數組即可
@Test public void test() { getNums("aaaccaccjjj1jjkJ好啊kkoo"); } public static void getNums(String str) { // 二維數組中第一位放字母出現的次數,第二位放首次出現該字母的索引位置 int[][] nums = new int[26][2]; char[] chs = str.toCharArray(); // 遍歷str中的每個字符 for (int i = 0; i < chs.length; i++) { if (chs[i] >= 97 && chs[i] <= 123) { if (nums[chs[i]-97][0] == 0) { nums[chs[i]-97][1] = i; } // 計數 nums[chs[i]-97][0]++; } } // 統計字符串中所有字母和個數,及第一次出現的索引位置 for (int i = 0; i < nums.length; i++) { if (nums[i][0] != 0) { char j = (char) (i + 97); System.out.println(j + "出現的次數為" + nums[i][0]+",第一次出現的索引位置為"+nums[i][1]); } } }三、統計相同字符連續緊鄰出現且長度最長的任意字符串片段。 未完待續。 ps:小女子初學java只會這樣的笨辦法,如果有更精妙的方法可以共享~
新聞熱點
疑難解答