这是我的代码。
方法counter
计算字符串中每个字母出现的次数。
public class Hard {
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");
}
}
答案 0 :(得分:2)
假设您正在使用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]));
}
}
}
优化的关键在于它执行一个传递而没有嵌套循环,一旦掌握了所需的所有信息,就会担心如何将其呈现给用户。
答案 1 :(得分:2)
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',因为键值会有所不同。
HashMap tutorials Point
答案 2 :(得分:0)
您可以使用 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");
});
}