public class StrCharAt {
public static void main(String[] args) {
String a = "A quick bronze fox lept a lazy bovine";
for (int i = 0; i < a.length(); i++) {
System.out.println("Char " + i + " is " + a.charAt(i));
}
}
}
char[] value,無額外對象創建public class ForEachChar {
public static void main(String[] args) {
String s = "Hello World";
for (char c : s.toCharArray()) {
System.out.println(c);
}
}
}
toCharArray() 會創建字符數組副本,長字符串有內存/GC 開銷| 場景 | 推薦方式 | 理由 |
|---|---|---|
| 短字符串、簡單遍歷打印 | for-each + toCharArray | 語法糖,碼簡單 |
| 長字符串、高頻調用 | for + charAt | 避免數組複製 |
| 需索引、需修改特定位置 | for + charAt | 天然支持索引 |
| 需轉字節/編碼處理 | getBytes(Charset) | 處理多字節字符 |
"Hello".chars().forEach(c -> System.out.println((char)c));
// 或
"Hello".codePoints().forEach(cp -> System.out.println(new String(Character.toChars(cp))));
chars():返回 IntStream(char 代碼單元)codePoints():返回 IntStream(Unicode 碼點,正確處理輔助字符)Java char 是 UTF-16 代碼單元(2 字節),無法獨立表示 Emoji 等輔助平面字符**(需代理對)。遍歷含 Emoji 字符串請用 codePoints() 或 Character.toChars 處理。
根據場景選擇合適方式,兼顧可讀性與效能。