题解 | #配置文件恢复#
配置文件恢复
https://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static HashMap<String, String> map = new HashMap<>();
public static void main(String[] args) {
init();
Scanner in = new Scanner(System.in);
List<String> orderList = new ArrayList<>();
map.forEach((k, v)->orderList.add(k));
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
String orderStr = in.nextLine();
// 匹配命令
matchOrder(orderStr, orderList);
}
}
public static void matchOrder(String order, List<String> orderList) {
String errorMsg = "unknown command";
String[] arrays = order.split(" ");
// 先根据最左匹配原则匹配
List<String > resList = new ArrayList<>();
for (String orderCommit : orderList) {
if (orderCommit.startsWith(arrays[0])) {
resList.add(orderCommit);
}
}
if (resList.isEmpty()) {
System.out.println(errorMsg);
return;
}
if (arrays.length == 1) {
// 有多条的情况。查看是否命令中多条含有字符串空格
resList.removeIf(res->res.contains(" "));
if (resList.size() == 1) {
System.out.println(map.get(resList.get(0)));
} else {
System.out.println(errorMsg);
}
} else {
// 多条匹配, 第二个命令字符串
String secondOrder = arrays[1];
// 只取第二行字符串的
resList.removeIf(res->!res.contains(" " + secondOrder));
if (resList.size() == 1) {
System.out.println(map.get(resList.get(0)));
} else {
System.out.println(errorMsg);
}
}
}
public static void init() {
map.put("reset", "reset what");
map.put("reset board", "board fault");
map.put("board add", "where to add");
map.put("board delete", "no board at all");
map.put("reboot backplane", "impossible");
map.put("backplane abort", "install first");
}
}
