计算字符串中的特定字符(Java)

我有一个家庭作业分配来计算字符串中的特定字符。

例如: string = "America"

输出应为= a appear 2 times, m appear 1 time, e appear 1 time, r appear 1 time, i appear 1 time and c appear 1 time

 public class switchbobo { /** * @param args */ // TODO Auto-generated method stub public static void main(String[] args){ String s = "BUNANA"; String lower = s.toLowerCase(); char[] c = lower.toCharArray(); // converting to a char array int freq =0, freq2 = 0,freq3 = 0,freq4=0,freq5 = 0; for(int i = 0; i 0) { System.out.println("Number of 'a' are "+freq); } } } 

上面的代码是我所做的,但我认为有26个变量(每个字母一个)是没有意义的。 你们有其他结果吗?

显然,你对每个字母都有一个变量的直觉是正确的。

问题是你没有任何自动方式对不同的变量做同样的工作,你没有任何简单的语法可以帮助你为26个不同的变量做同样的工作(计算一个char频率)。

那你能做什么? 我会向你暗示两个解决方案:

  • 你可以使用一个数组(但是你必须找到一种方法将字符az映射到索引0-25 ,这在某种程度上是微不足道的,你是因为ASCII编码的原因)
  • 您可以使用HashMap这是一个关联容器,在这种情况下,允许您将数字映射到特定字符,以便它完全符合您的需求

您可以使用字符键和整数值的HashMap

 HashMap 

遍历字符串

 -if the character exists in the map get the Integer value and increment it. -if not then insert it to map and set the integer value for 0 

这是一个伪代码,你必须尝试编码

我正在使用HashMap作为解决方案。

 import java.util.*; public class Sample2 { /** * @param args */ public static void main(String[] args) { HashMap map = new HashMap(); String test = "BUNANA"; char[] chars = test.toCharArray(); for(int i=0; i 

产生的输出 - {U = 2,A = 3,B = 2,N = 3}

继续Jack的回答,以下代码可能是您的解决方案。 它使用一个数组来存储字符的频率。

 public class SwitchBobo { public static void main(String[] args) { String s = "BUNANA"; String lower = s.toLowerCase(); char[] c = lower.toCharArray(); int[] freq = new int[26]; for(int i = 0; i< c.length;i++) { if(c[i] <= 122) { if(c[i] >= 97) { freq[(c[i]-97)]++; } } } System.out.println("Total chars " + c.length); for(int i = 0; i < 26; i++) { if(freq[i] != 0) System.out.println(((char)(i+97)) + "\t" + freq[i]); } } } 

它将提供以下输出:

 Total chars 6 a 2 b 1 n 2 u 1 
 int a[]=new int[26];//default with count as 0 for each chars at string if (String having uppercase) a[chars-'A' ]++ if lowercase then a[chars-'a']++ 
 public class TestCharCount { public static void main(String args[]) { String s = "america"; int len = s.length(); char[] c = s.toCharArray(); int ct = 0; for (int i = 0; i < len; i++) { ct = 1; for (int j = i + 1; j < len; j++) { if (c[i] == ' ') break; if (c[i] == c[j]) { ct++; c[j] = ' '; } } if (c[i] != ' ') System.out.println("number of occurance(s) of " + c[i] + ":" + ct); } } } 

也许你可以用它

 public static int CountInstanceOfChar(String text, char character ) { char[] listOfChars = text.toCharArray(); int total = 0 ; for(int charIndex = 0 ; charIndex < listOfChars.length ; charIndex++) if(listOfChars[charIndex] == character) total++; return total; } 

例如:

 String text = "america"; char charToFind = 'a'; System.out.println(charToFind +" appear " + CountInstanceOfChar(text,charToFind) +" times"); 

在字符串中计算char’l’。

  String test = "Hello"; int count=0; for(int i=0;i 

要么

 int count= StringUtils.countMatches("Hello", "l");