题解 | 配置文件恢复
配置文件恢复
https://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5
import java.util.*;
public class Main {
public static void main(String[] args) {
// 1. 建立命令与结果的映射关系
// Key: 命令字符串, Value: 执行结果
Map<String, String> commandMap = new HashMap<>();
commandMap.put("reset", "reset what");
commandMap.put("reset board", "board fault");
commandMap.put("board add", "where to add");
commandMap.put("board delete", "no board at all");
commandMap.put("reboot backplane", "impossible");
commandMap.put("backplane abort", "install first");
Scanner scanner = new Scanner(System.in);
// 2. 循环处理多组输入,直到没有更多输入
// scanner.hasNextLine() 会等待并检查是否有下一行输入
while (scanner.hasNextLine()) {
String input = scanner.nextLine().trim(); // 读取一行并去除首尾空格
// 如果输入为空行,则跳过
if (input.isEmpty()) {
continue;
}
// 3. 将输入按空格分割成关键字数组
// 使用 split("\\s+") 可以分割一个或多个连续的空格
String[] parts = input.split("\\s+");
// 4. 根据关键字数量进行匹配
String result = "unknown command"; // 默认结果为未知命令
if (parts.length == 1) {
// 处理一个关键字的情况
result = findMatch(commandMap, parts[0], null);
} else if (parts.length >= 2) {
// 处理两个或多个关键字的情况(我们只关心前两个)
result = findMatch(commandMap, parts[0], parts[1]);
}
// 5. 输出最终结果
System.out.println(result);
}
scanner.close();
}
/**
* 根据输入的关键字查找唯一匹配的命令
* @param commandMap 命令库
* @param key1 第一个关键字
* @param key2 第二个关键字 (如果只有一个关键字,则为 null)
* @return 命令的执行结果,或 "unknown command"
*/
private static String findMatch(Map<String, String> commandMap, String key1,
String key2) {
List<String> candidates = new ArrayList<>();
// 遍历命令库中的每一个命令
for (String cmd : commandMap.keySet()) {
// 将命令按空格分割成单词
String[] cmdWords = cmd.split(" ");
if (key2 == null) {
// --- 场景一:用户只输入了一个关键字 ---
// 规则:必须匹配只有一个单词的命令
if (cmdWords.length == 1) {
// 检查命令的单词是否以输入的关键字开头
if (cmdWords[0].startsWith(key1)) {
candidates.add(cmd); // 加入候选列表
}
}
} else {
// --- 场景二:用户输入了两个关键字 ---
// 规则:必须匹配有两个单词的命令
if (cmdWords.length == 2) {
// 检查命令的第一个单词是否以第一个关键字开头,
// 并且第二个单词是否以第二个关键字开头
if (cmdWords[0].startsWith(key1) && cmdWords[1].startsWith(key2)) {
candidates.add(cmd); // 加入候选列表
}
}
}
}
// 根据候选列表的大小决定最终结果
if (candidates.size() == 1) {
// 唯一匹配,返回该命令对应的结果
return commandMap.get(candidates.get(0));
} else {
// 没有匹配或匹配不唯一
return "unknown command";
}
}
}
查看22道真题和解析
