
本文介绍如何用 java 编写一个模拟“caps lock”功能的字符串处理器:读取指定数量的输入项(含普通字符和 "caps" 切换指令),动态切换后续字符的大小写状态,并拼接输出最终字符串。
本文介绍如何用 java 编写一个模拟“caps lock”功能的字符串处理器:读取指定数量的输入项(含普通字符和 "caps" 切换指令),动态切换后续字符的大小写状态,并拼接输出最终字符串。
在命令行交互式文本处理中,模拟键盘行为(如 CAPS Lock)是经典的逻辑控制练习。本例要求:程序首先读入一个整数 n,表示后续将输入 n 个字符串;每个输入项要么是单个字母(如 "s"、"h"),要么是特殊指令 "CAPS";初始状态为小写模式,每次遇到 "CAPS" 就翻转大小写模式(小写 ↔ 大写),而普通字符按当前模式转换后追加到结果中。
核心逻辑在于状态管理:使用布尔变量 isCAPSEnabled 记录当前是否处于大写模式(默认 false)。每读取一个字符串,判断是否为 "CAPS" —— 是则取反该状态;否则根据当前状态调用 toLowerCase() 或 toUpperCase() 转换并拼接。
以下是完整可运行的参考实现:
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() 读取异常(可选,因后续用 next())
while (n-- > 0) {
String token = input.next();
if ("CAPS".equals(token)) {
isCAPSEnabled = !isCAPSEnabled;
} else {
result += isCAPSEnabled
? token.toUpperCase()
: token.toLowerCase();
}
}
System.out.print(result);
}
}✅ 关键设计说明:
立即学习“Java免费学习笔记(深入)”;
- 使用 "CAPS".equals(token) 替代 token.equals("CAPS") 可避免 token 为 null 时抛出 NullPointerException(尽管本题输入保证非空,但属良好实践);
- n-- > 0 是简洁安全的循环控制方式,确保恰好处理 n 个输入项;
- input.next() 自动跳过空白符(包括换行和空格),天然适配题目中每行一个输入的格式;
- 不依赖额外计数器或临时缓冲区,逻辑清晰、空间高效。
⚠️ 注意事项:
- 输入的普通字符均为单字母(如 "s"),因此 toLowerCase()/toUpperCase() 对单字符安全有效;若未来扩展支持多字符输入,需确保仅处理首字符或明确规范行为;
- 题目未要求校验输入合法性(如非法字符串),生产环境建议增加 if (!token.equals("CAPS") && token.length() != 1) 等防御性检查;
- 字符串拼接在 n 较大时可能影响性能,可改用 StringBuilder 提升效率(例如:StringBuilder sb = new StringBuilder(); ... sb.append(...);)。
该方案以最小复杂度精准满足需求:状态切换干净、转换逻辑明确、代码可读性强,是 Java 基础控制流与字符串操作的典型应用范例。










