實現字符串中字母大小寫互換(大寫變小寫、小寫變大寫),非字母字符保持不變。
public static String exchangeStringA(String s) {
StringBuffer result = new StringBuffer();
String lower = s.toLowerCase();
String upper = s.toUpperCase();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == lower.charAt(i)) {
// 原字符是小寫,轉大寫
result.append(upper.charAt(i));
} else {
// 原字符是大寫,轉小寫
result.append(lower.charAt(i));
}
}
return result.toString();
}
public static String exchangeStringB(String s) {
char[] c = s.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] >= 65 && c[i] <= 90) { // 'A'-'Z'
c[i] = (char) (c[i] + 32); // 轉小寫
} else if (c[i] >= 97 && c[i] <= 122) { // 'a'-'z'
c[i] = (char) (c[i] - 32); // 轉大寫
}
// 非字母字符不變
}
return String.valueOf(c);
}
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
System.out.println(exchangeStringA(s));
System.out.println(exchangeStringB(s));
}
// ... 兩個方法放這裡
}
| 維度 | 方式一 | 方式二 |
|---|---|---|
| 原理 | 調用 JDK 內置轉換方法對比 | 直接操作字符 ASCII 碼 |
| 可讀性 | 高,語義清晰 | 較低,依賴魔術數字 32 |
| 性能 | 創建額外字符串對象 | 原地修改字符數組,效率略高 |
| 適用場景 | 一般業務代碼 | 高頻調用、性能敏感場景 |
建議: 方式一碼風格更佳,方式二適合極致優化。實際開發中也可直接使用 Apache Commons Lang StringUtils.swapCase()。