计算字符串中的特定字符数(Java)
我有一个家庭作业来计算字符串中的特定字符 例如:计算字符串中的特定字符数(Java),java,string,char,histogram,Java,String,Char,Histogram,我有一个家庭作业来计算字符串中的特定字符 例如:string=“America” 输出应该是a出现2次,m出现1次,e出现1次,r出现1次,i出现1次,c出现1次 public class switchbobo { /** * @param args */ // TODO Auto-generated method stub public static void main(String[] args){ String s = "BUNANA"; String l
string=“America”
输出应该是a出现2次,m出现1次,e出现1次,r出现1次,i出现1次,c出现1次
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< c.length;i++) {
if(c[i]=='a') // looking for 'a' only
freq++;
if(c[i]=='b')
freq2++;
if (c[i]=='c') {
freq3++;
}
if (c[i]=='d') {
freq4++;
}
}
System.out.println("Total chars "+c.length);
if (freq > 0) {
System.out.println("Number of 'a' are "+freq);
}
}
}
公共类switchbobo{
/**
*@param args
*///TODO自动生成的方法存根
公共静态void main(字符串[]args){
字符串s=“BUNANA”;
String lower=s.toLowerCase();
char[]c=lower.toCharArray();//转换为字符数组
int freq=0,freq2=0,freq3=0,freq4=0,freq5=0;
for(int i=0;i0){
System.out.println(“a”的数量为“+freq”);
}
}
}
上面的代码就是我所做的,但我认为有26个变量(每个字母一个)是没有意义的。你们有其他的结果吗?显然,你们的直觉是每个字母都有一个变量是正确的 问题是,您没有任何自动的方法对不同的变量执行相同的工作,也没有任何简单的语法可以帮助您对26个不同的变量执行相同的工作(计算单个字符频率) 那你能做什么呢?我将提示您两种解决方案:
- 您可以使用数组(但您必须找到一种方法将字符
映射到索引a-z
,这在某种程度上是微不足道的,这是您使用ASCII编码的原因)0-25
- 您可以使用一个关联容器,在这种情况下,该容器允许您将数字映射到特定字符,以便它完全符合您的需要
HashMap
HashMap<Character,Integer>
这是一个伪代码,您必须尝试对其进行编码以下代码可能是您的解决方案。它使用数组来存储字符的频率
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]);
}
}
}
我正在使用HashMap作为解决方案
import java.util.*;
public class Sample2 {
/**
* @param args
*/
public static void main(String[] args)
{
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
String test = "BUNANA";
char[] chars = test.toCharArray();
for(int i=0; i<chars.length;i++)
{
if(!map.containsKey(chars[i]))
{
map.put(chars[i], 1);
}
map.put(chars[i], map.get(chars[i])+1);
}
System.out.println(map.toString());
}
}
import java.util.*;
公共类样本2{
/**
*@param args
*/
公共静态void main(字符串[]args)
{
HashMap=newHashMap();
字符串测试=“BUNANA”;
char[]chars=test.toCharArray();
对于(inti=0;ipublic类TestCharCount{
公共静态void main(字符串参数[]){
String s=“美国”;
int len=s.length();
char[]c=s.toCharArray();
int-ct=0;
对于(int i=0;i
也许你可以用这个
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;
}
计算字符串中的字符“l”
String test = "Hello";
int count=0;
for(int i=0;i<test.length();i++){
if(test.charAt(i)== 'l'){
count++;
}
}
使用一个有26个索引的数组。('a'-'a'==0,'b'-'a'==1
,依此类推)。对于番石榴,也可以使用a,但这对于家庭作业来说可能太过分了:)关于代码c[i]-97,这会像预期的那样工作吗?我很怀疑,因为变量c是字符类型,它是减去一个整数。在c语言中,你可以让它工作,但Java是一种更严格的类型语言。因此我不鼓励它。使用ASCII编码更安全、更传统。例如,字母“a”的ASCII值是多少?@TheOriginalAndroid:是的。如果没有,我就不会发布了。当在字符和整数之间执行算术运算时,实际上是在字符的ascii值和整数之间执行的。这种运算的结果也是一个整数。
ascii值'a'是97!!欢迎使用stackoverflow,这很有帮助如果你提供一些解释来配合你的代码。通过这种方式,而不是复制/粘贴并希望它能工作,问问题的人将能够看到为什么有些东西能工作,为什么没有你尝试过它?因为它给每个字母+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");
String test = "Hello";
int count=0;
for(int i=0;i<test.length();i++){
if(test.charAt(i)== 'l'){
count++;
}
}
int count= StringUtils.countMatches("Hello", "l");