1.有一个字符串,例如 str="asddfg sssd adfe" 如何统计每个字符的个数
输出结果如:
a 2个
s 4个
d 4个
f 2个
g 1个
e 1个
2.有一个字符串,例如 str="asddfg sssd adfe" 对字符串进行重排输出字符串“asddfgsssdadfe”
注意:字符串中的空格不是一个而是多个。求方法(思想)。
先转化成字符数组,然后遍历,定义一个map集合,将遍历的结果往里加,例如'a',第一次出现,key值为a,value为1,往后遇到重复出现的,value为getKey() + 1.
对于你的第二个问题,其实蛮简单的,用表达式把空格拿掉就好了, “\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]+"次");
}
}
}
}