java字符串中字符个数计算

1.有一个字符串,例如 str="asddfg sssd adfe" 如何统计每个字符的个数
输出结果如:
a 2个
s 4个
d 4个
f 2个
g 1个
e 1个

 2.有一个字符串,例如 str="asddfg  sssd   adfe" 对字符串进行重排输出字符串“asddfgsssdadfe”
 注意:字符串中的空格不是一个而是多个。求方法(思想)。

5个回答

先转化成字符数组,然后遍历,定义一个map集合,将遍历的结果往里加,例如'a',第一次出现,key值为a,value为1,往后遇到重复出现的,value为getKey() + 1.

  1. 对于第一个吧,我不知道你是否需要去掉空格。 如果不需要的, 那么可以用Hashmap 来储存结果,因为Hashmap 的 key 在同一个hashmap 里是唯一性的,比如你有一个key 叫 "a", 那么这个hashmap 里就不能有另一个key 叫“a". 然后用for 来循环整个字组, 如果hashmap 里没有那个字母key 的存在,就添加进hashmap, 有的话,就加一。具体如下: String example = "asddfg sssd adfe"; HashMap map = new HashMap<>(); for (char item : example.toCharArray()) { if (map.containsKey(item)) { int val = map.get(item); map.put(item, val + 1); } else { map.put(item, 1); } } System.out.println(map);

对于你的第二个问题,其实蛮简单的,用表达式把空格拿掉就好了, “\s+" 的意思就是去掉所有空格,不管是一个,两个。。。
String example = "asddfg sssd adfe";
example = example.replaceAll("\s+", "");
System.out.println(example);


如果你需要在统计前去掉空格,你就先用第二个的结果,去统计就好了。

利用hashMap实现

```HashMap hm = new HashMap();
char[] c = s.toCharArray();
for(int i = 0; i<c.length;i++){
if(hm.containsKey(c[i])){

            hm.put(c[i],hm.get(c[i])+1 );
        }else{
            hm.put(c[i], 1);
        }
    }

    for(Character key : hm.keySet()){
        System.out.println(key + " = " + hm.get(key));
    }

class Test{

String str = "asddfg sssd adfe";
int strlength = str.length();
int i = 0;

int[] num = new int[26];
char[] cht = new char[26];

void Cal()
{
    while(i<strlength)
    {
        char ch = str.charAt(i);
        if(ch>='a'&&ch<='z'){
            num[ch-'a']++;
            cht[ch-'a']=ch;
        }

        i++;
    }
    for(i=0;i<26 ;i++)
    {
        System.out.println("字符"+cht[i]+"=="+num[i]+"个");
    }
}
public static void main(String argv[])
{
    Test test = new Test();
    test.Cal();
    System.out.println("hello world!");
}

}
结果如下:
图片说明

 import java.util.Scanner;  

public class 统计字符 {  
    public static void main(String[] args) {  

        Scanner sc = new Scanner(System.in);  
        int[] a = new int[26];//数组存放对应26个字母的出现次数比如a[0]的值对应字母a出现的次数,a[2]的值对应c出现的次数。。。  
        System.out.println("请输入一串小写字符串");  
        String str=sc.nextLine();  
        str=str.trim().toLowerCase();//去掉前后空格并且全转为小写字母  

        //此for循环求各个字母出现的次数  
        for (int i = 0; i < str.length(); i++)  
        {  
            char c = str.charAt(i);//依次取出每个字母  
            int index=c-'a';//这样就可以得到每个字母对应的数组下标  
            a[index]=a[index]+1;//对应字母出现则存储字母的数组加1  
        }  

        //此for循环打印每个字母出现的次数,没有出现则不打印输出  
        for (int i = 0; i < a.length; i++)  
        {  
            if(a[i]!=0)//等于0相当于这个字母没出现就没必要打印  
            {  
                System.out.println("字母"+(char)(i+'a')+"出现:"+a[i]+"次");  
            }  
        }  
    }  

}  
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐