计算字符串中字符频率的最简单方法是什么?

时间:2014-10-19 16:17:36

标签: java

我想计算字母表中每个字符出现在字符串中的次数。

这是我到目前为止所做的:

        Scanner input = new Scanner(System.in);
        PrintStream out = System.out;
        out.print("Enter the string : ");
        String na = input.nextLine();
        String n = na.toUpperCase();
        int l = n.length() ;
        int len = l;
        int a1 =0 , b =0, c =0, d=0 , e =0 ,f=0 ,g =0 ,h =0, u=0 ,i1 =0,j=0 ,k=0 ,l1=0 ,m=0, n1=0, o=0, p=0, q=0,r=0,s=0, t1=0 , v=0, w=0, x=0, y=0, z  = 0;


         for (int i = 0; i< len ; i++)
         {
             char a = n.charAt(i);

             if(n.charAt(i) =='A')
             {
                a1++;
              }
             else if(n.charAt(i) =='B')
            {
                    b++;
             }
             else  if(n.charAt(i) =='C')
             {
                c++;
              }
             else if(n.charAt(i) =='D')
             {
                d++;
              }
             else if(n.charAt(i) =='E')
             {
                e++;
              }
             else  if(n.charAt(i) =='F')
             {
                f++;
              }
             else if(n.charAt(i) =='G')
                 {
                    g++;
                  }
                else if(n.charAt(i) =='H')
                    {
                        h++;
                     }
                    else if(n.charAt(i) =='I')
                     {
                            i1++;
                       }
                    else if(n.charAt(i) =='J')
                      {
                        j++;
                       }
                     else if(n.charAt(i) =='K')
                     {
                        k++;
                     }
                     else   if(n.charAt(i) =='L')
                     {
                        l++;
                      }
                     else if(n.charAt(i) =='M')
                     {
                        m++;
                      }
                     else   if(n.charAt(i) =='N')
                     {
                        n1++;
                      }
                     else    if(n.charAt(i) =='O')
                     {
                        o++;
                      }
                     else  if(n.charAt(i) =='P')
                     {
                        p++;
                      }
                     else if(n.charAt(i) =='Q')
                     {
                    q++;
                     }
                     else   if(n.charAt(i) =='R')
                     {
                        r++;
                     }

         }
    out.print(a1+"A" +b+"B"+c+"C"+d+"D"+e+"E"+f+"F"+g+"G"+h+"H"+i1+"I"+j+"J"+k+"K"+l1+"L"+m+"M"+n1+"N"+o+"O"+p+"P"+q+"Q"+r+"R");
    }

}

4 个答案:

答案 0 :(得分:4)

您可以使用地图界面并执行以下操作:

Map<Character,Integer> map = new HashMap<Character,Integer>();
for (int i = 0; i < s.length(); i++) {
  char ch = s.charAt(i);
  if (map.containsKey(ch)) {
    int cnt = map.get(ch);
    map.put(ch, ++cnt);
  } else {
    map.put(ch, 1);
  }
}

这将计算所有字符并给你计数。

答案 1 :(得分:2)

使用实现Map接口的类。将每个Char映射到Integer,表示Char出现的时间。遍历字符串,递增字符映射中的计数。

答案 2 :(得分:0)

如果我理解了您的问题,那么您可以使用int数组来存储您的计数。然后根据字符值计算正确的位置。像

这样的东西
System.out.println("Enter the string : ");
String line = scanner.nextLine();
int[] alphabet = new int['z' - 'a'];
for (char ch : line.toLowerCase().toCharArray()) {
    alphabet[ch - 'a']++;
}
for (int i = 0; i < alphabet.length; i++) {
    if (i != 0) System.out.print(", ");
    System.out.printf("'%c' = %d",
            Character.toUpperCase('a' + i), alphabet[i]);
}

答案 3 :(得分:0)

    String na = "A MixXx of LeTTers";
    char lowercase = 'a';
    char uppercase = 'A';

    for(int i=0; i < 26; i++){

        int count_of_tagert_lower = 0;
        int count_of_tagert_upper = 0;
        for(String str : na.split("")){
            if (str.contains(String.valueOf(lowercase))){
                count_of_tagert_lower++;

            }
            else if (str.contains(String.valueOf(uppercase))){
                count_of_tagert_upper++;

            }else{
                //just in case?

            }


        }
        System.out.println(String.valueOf(lowercase) + " occured " + count_of_tagert_lower);
        System.out.println(String.valueOf(uppercase) + " occured " + count_of_tagert_upper);
        uppercase++;
        lowercase++;

    }

}