题解 | #配置文件恢复#
https://www.nowcoder.com/practice/ca6ac6ef9538419abf6f883f7d6f6ee5
这道题关键是会使用startsWith函数以及懂得用哈希表存储命令行键值对,从而去匹配。
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 Map<String,String>command=new HashMap<String,String>();//建立哈希表 //向哈希表里添加键值对 command.put("reset","reset what"); command.put("reset board","board fault"); command.put("board add","where to add"); command.put("reboot backplane","impossible"); command.put("backplane abort","install first"); command.put("board delete","no board at all"); command.put("not match","unknown command"); Set<String []> str=new HashSet<>(); //将命令行里的字符串的每个单词分别存储到集合Str里 for(String s:command.keySet()){ str.add(s.split(" ")); } while(sc.hasNextLine()){ String []arr=sc.nextLine().split(" "); //将输入的字符串按空格前后分割成数组 String res="not match"; int count=0; for(String[]s: str){ if(arr.length==1){ if(s.length==2) //单字符匹配到的双关键字命令 则不成功跳过 continue; else{ if(s[0].startsWith(arr[0])) { res=s[0]; count++; } } } if(arr.length==2){ if(s.length==1){ //双字符匹配到单关键字命令,跳过 continue; } else{ if(s[0].startsWith(arr[0])&&s[1].startsWith(arr[1])){ res=s[0]+" "+s[1]; count++; } } } } System.out.println(count>1?"unknown command":command.get(res)); } } }