首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java ArrayList 統計字元出現次數:邏輯錯誤修正與最佳實踐

     編輯:程式設計綜合問答

原始碼問題

// 錯誤:將字串拆為 char 存入 ArrayList
for (Object v : f.toCharArray()) arrayList.add(v);
// 錯誤:拿「單一字元」與「完整查詢字串」比較
if (a.next().equals(string)) num++;

若輸入句子「我愛你中國」,查詢「中國」,程式會逐字比較:「我」==「中國」? 「愛」==「中國」? …永遠不相等。

正確邏輯

  1. 若統計**單一字元**出現次數:查詢輸入應限制長度 1,直接遍歷字串 charAt 比對。
  2. 若統計**子字串**出現次數:使用 indexOf 循環或正則 Pattern/Matcher。

修正範例(統計字元)

String text = "我愛你中國";
String target = "中"; // 單一字元
int count = 0;
for (int i = 0; i < text.length(); i++) {
    if (text.charAt(i) == target.charAt(0)) count++;
}
System.out.println(count); // 輸出 1

修正範例(統計子字串)

String text = "中國中國人";
String target = "中國";
int count = 0, idx = 0;
while ((idx = text.indexOf(target, idx)) != -1) {
    count++;
    idx += target.length(); // 避免重疊計數,若需重疊則 idx++
}
System.out.println(count); // 輸出 2

進階:使用 Map 統計所有字元頻率

Map<Character, Integer> freq = new HashMap<>();
for (char c : text.toCharArray()) {
    freq.merge(c, 1, Integer::sum);
}
// 輸出:{中=2, 國=2, 人=1}

總結

明確需求是「統計字元」還是「統計子字串」,選擇對應演算法;避免濫用 ArrayList 存放基本型別,優先使用 String 原生方法或 Map 統計。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved