如何使此字符串计数器代码更有效



这是我的代码。方法 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");
        });
 }

最新更新