这是我的代码。方法 counter
计算每个字母在字符串中出现的次数。
公共类 硬{
public static void counter (String s) {
for (int n = 0; n < s.length() ; n++) {
int count = 0 ,bool = 1;
if (n > 0) {
for (int L = n-1 ; L >= 0 ; L--) {
if (s.charAt(n) == s.charAt(L)) {bool = 0; }
}
}
for (int f = 0; f < s.length() ; f++ ) {
if (bool == 0) { break ; }
if (s.charAt(n) == s.charAt(f)) {count++;}
}
if (count > 0 ) {
System.out.println(s.charAt(n)+" appears "+count+" times.");
}
}
}
public static void main (String[] args) {
counter("bbaddadxzxwfgb$.fgfdf");
}
}
假设你使用的是Java,并假设A和a被算作同一个字母。
public static int[] counter (String s) {
int [] countArr = new int[26];
for(int i=0; i<s.length(); i++) {
char charAtI = s.charAt(i);
if(Character.isLetter(charAtI)) {
countArr[Character.isUpperCase(charAtI) ? charAtI - 'A' : charAtI - 'a']++;
}
}
return countArr;
}
public static void main (String[] args) {
int [] countArr = counter("asif and abid.");
for(int i = 0; i<countArr.length; i++) {
if(countArr[i] > 0) {
System.out.println(MessageFormat.format("{0} appears {1} times", (char)(i + 'a'), countArr[i]));
}
}
}
优化的关键在于它执行一次传递,没有嵌套循环,一旦您拥有所需的所有信息,然后担心如何将其呈现给用户。
public static HashMap<Character, Integer> counter(String input) {
HashMap<Character, Integer> chCount = new HashMap<>();
for (int i = 0 i < input.length(); i++) {
char c = input.charAt(i);
if (chCount.containsKey(c)) {
int count = chCount.get(c);
chCount.put(c, count + 1);
} else {
chCount.put(c, 1);
}
}
return chCount;
}
您也可以使用哈希图。它将适用于其他字符,如"#"等,您可以以不同的方式处理"A"和"a",因为键值会不同。
哈希图教程点
你可以这样计算字符,使用 java 8
public static void main(String[] args){
String string="what is this?";
List<Character> chars=string.chars().distinct().mapToObj(i->Character.valueOf((char)i)).filter(p->Character.isAlphabetic(p)).collect(Collectors.toList());
chars.forEach(c->{
long count=string.chars().mapToObj(i->Character.valueOf((char)i)).filter(p->p==c).count();
System.out.println(c+" appear "+count+" times");
});
}