1. 题目
读题
考查点
2. 解法
思路
代码逻辑
具体实现
代码的主要步骤如下:
- 首先,定义一个Map对象,使用HashMap类来创建,将配置命令作为键,将执行结果作为值,存储在Map中。
- 然后,定义一个方法,用来判断输入的字符串是否能唯一匹配一个配置命令,并返回匹配的结果或者"unknown command"。
- 接着,使用Scanner类来读取用户的输入,并调用判断方法,输出相应的结果。
- 最后,关闭Scanner对象。
代码如下:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
// 配置命令的Map
public static final Map<String, String> commands = new HashMap<>();
// 初始化Map,将配置命令和执行结果存储在Map中
static {
commands.put("reset", "reset what");
commands.put("reset board", "board fault");
commands.put("board add", "where to add");
commands.put("board delete", "no board at all");
commands.put("reboot backplane", "impossible");
commands.put("backplane abort", "install first");
}
// 判断输入的字符串是否能唯一匹配一个配置命令,并返回匹配的结果或者"unknown command"
public static String matchCommand(String input) {
// 如果输入为空,直接返回"unknown command"
if (input == null || input.isEmpty()) {
return "unknown command";
}
// 将输入的字符串按空格分割成单词数组
String[] words = input.split(" ");
// 如果单词数组的长度大于2,说明输入不合法,直接返回"unknown command"
if (words.length > 2) {
return "unknown command";
}
// 定义一个变量,用来记录匹配成功的次数
int count = 0;
// 定义一个变量,用来记录匹配成功的命令
String match = null;
// 遍历Map中的所有键值对,逐个比较
for (Map.Entry<String, String> entry : commands.entrySet()) {
// 获取当前键值对的键和值
String key = entry.getKey();
String value = entry.getValue();
// 将当前键按空格分割成单词数组
String[] cmd = key.split(" ");
// 如果单词数组的长度和输入的单词数组的长度相同,才有可能匹配成功
if (cmd.length == words.length) {
// 定义一个标志变量,用来记录当前键是否匹配成功
boolean flag = true;
// 遍历单词数组,逐个比较
for (int i = 0; i < words.length; i++) {
// 如果当前单词不是当前键单词的前缀,说明匹配失败,将标志变量设为false,并跳出循环
if (!cmd[i].startsWith(words[i])) {
flag = false;
break;
}
}
// 如果标志变量为true,说明匹配成功,将匹配次数加一,并记录当前键和值
if (flag) {
count++;
match = value;
}
}
}
// 如果匹配次数为1,说明唯一匹配成功,返回对应键的值
if (count == 1) {
return match;
} else {
// 否则,说明没有匹配或者多次匹配,返回"unknown command"
return "unknown command";
}
}
public static void main(String[] args) {
// 创建Scanner对象,用来读取用户的输入
Scanner sc = new Scanner(System.in);
// 循环读取用户的输入,直到遇到空行或者结束符
while (sc.hasNextLine()) {
// 读取一行输入,并去掉首尾空格
String input = sc.nextLine().trim();
// 调用判断方法,并输出结果
System.out.println(matchCommand(input));
}
// 关闭Scanner对象
sc.close();
}
}