题解 | #配置文件恢复#
配置文件恢复
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"); } }