
本文介绍如何用 java 编写一个根据“caps”指令动态切换大小写状态的字符串处理程序:读取指定数量的输入项,遇到“caps”时翻转当前大小写模式(初始为小写),其余字符按当前模式转换后拼接输出。
本文介绍如何用 java 编写一个根据“caps”指令动态切换大小写状态的字符串处理程序:读取指定数量的输入项,遇到“caps”时翻转当前大小写模式(初始为小写),其余字符按当前模式转换后拼接输出。
该问题本质是实现一种状态机式字符处理逻辑:程序需维护一个布尔状态 isCAPSEnabled,初始为 false(表示后续普通字符应转为小写),每读到 "CAPS" 就翻转该状态,而其他输入则根据当前状态调用 toUpperCase() 或 toLowerCase() 转换后追加至结果字符串。
以下是完整、简洁且健壮的实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String result = "";
boolean isCAPSEnabled = false;
Scanner input = new Scanner(System.in);
int n = input.nextInt();
input.nextLine(); // 消费换行符,避免 nextLine() 读取异常(可选,但推荐)
while (n-- > 0) {
String token = input.next(); // 每次读取一个词(题目中每个输入均为单字符或"CAPS")
if ("CAPS".equals(token)) {
isCAPSEnabled = !isCAPSEnabled;
} else {
result += isCAPSEnabled
? token.toUpperCase()
: token.toLowerCase();
}
}
System.out.print(result);
}
}✅ 关键设计说明:
- 使用 "CAPS".equals(token) 替代 token.equals("CAPS") 可避免 token 为 null 时的空指针异常(虽本题输入保证非空,但属良好实践);
- n-- > 0 循环简洁控制输入次数,无需额外计数器;
- 初始 isCAPSEnabled = false 对应题目要求的“默认小写”;
- 每个非 "CAPS" 输入视为单字符字符串(如 "s"、"h"),toUpperCase()/toLowerCase() 对单字符安全有效;
- 注意: 若实际输入含多字符单词(非本题场景),需额外校验长度或拆分,但本题输入规范明确为单字符或 "CAPS"。
⚠️ 常见误区提醒:
立即学习“Java免费学习笔记(深入)”;
- 原代码中 if (CAPSval) 初始为 false 却无对应逻辑分支,导致流程失控;
- 错误地将 CAPS 计入输出长度(如 n - CAPScounter),混淆了输入项总数与有效字符数;
- 未及时消费 nextInt() 后的换行符,可能导致后续 next() 行为异常(本解通过 next() 自动跳过空白符规避,但若改用 nextLine() 则必须显式处理)。
该方案时间复杂度 O(N),空间复杂度 O(N)(仅用于存储结果),逻辑清晰、可读性强,完全满足题目示例:输入 8 个项 s,f,k,CAPS,h,j,CAPS,p,输出 sfkHJp —— 验证通过。










