计算重复的字母

eli*_*ai2 0 java arrays string int

我想得到一个字符串计数字符串中的任何字母它在字符串中出现的时间,并打印字母和数字以便我做了什么:

import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
    String str;
    Scanner in = new Scanner(System.in);
    System.out.println("enter name");
    str = in.nextLine();
    char[] c1 = str.toCharArray();
    int[] f = new int[str.length()];
    for(int i=0;i<str.length();i++) {
        for(int j=0;j<str.length();j++) {
            if(c1[i]==c1[j]) {
                f[i]++;
            }
        }
    }
    for(int k=0;k<c1.length;k++) {
        for(int l=0;l<c1.length;l++) {
            if(c1[k]==c1[l]) {
                if(l!=k) {c1[k]=0;f[k]=0;}
            }
        }
        System.out.println(c1[k]+"="+f[k]);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

有两个问题:
1.当我打印它时,打印重复的字母两次(或者三次或更多次取决于字母在字符串中的次数).所以我说的另外2圈(K和L)是删除重复的字母,但现在不是重复的字母是打印我:一个正方形和一个零,我如何才能让删除的文字和从焦炭数量和int array的?(例如,当我输入名称"elichai"时,我得到:

e = 1
l = 1
(正方形)= 0
c = 1
h = 1
a = 1
i = 2

2,信它删除是第二个字母不是第一次
(在"elichai"例如它删除了第一个"我",而不是第二个"我")谢谢!

jlo*_*rdo 7

解决问题的方法不同,但我可能会这样做:

String input = "Whatever";
Map<Character, Integer> charCounter = new LinkedHashMap<>(); // respects insertion order
for (char c : input.replaceAll("\\s+", "").toCharArray()) { // ignore spaces
    Integer count = charCounter.get(c);
    count = count == null ? 0 : count;
    charCounter.put(c, count + 1);
}
System.out.println(charCounter);
Run Code Online (Sandbox Code Playgroud)