配置文件恢复

配置文件恢复

http://www.nowcoder.com/questionTerminal/ca6ac6ef9538419abf6f883f7d6f6ee5

本题是关于字符串匹配的题。
先用哈希表将命令都存起来,然后再建立一个包含所有命令的字符串数组类型的哈希视图。然后用输入的字符串数组与该视图的每一个元素去匹配比较。

import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
public class Main{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        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 delet","no board at all");
        Set<String[]> order=new HashSet<String[]>();//建立哈希命令视图
        //遍历哈希表的set视图,向哈希命令表里添加命令
        for(String s:command.keySet())
        {
            order.add(s.split(" "));
        }
        while(sc.hasNextLine())
        {
            String input=sc.nextLine();
            String[] inputChange=input.split(" ");//将输入字符串用空格分隔,以便比较
            String[] compitable=null;//匹配的命令字符串
            //开始遍历命令视图
            for(String[] cmpOrder:order)
            {
                //输入字符串数组长度为一
                if(inputChange.length==1)
                {
                    //命令字符串数组长度为二,不匹配
                    if(cmpOrder.length==2)
                        continue;
                    else
                    {
                        //匹配成功
                        if(cmpOrder[0].startsWith(inputChange[0]))
                        {
                            compitable=cmpOrder;
                            break;
                        }
                    }
                }
                //输入字符串数组长度为二的情况
                if(inputChange.length==2)
                {
                    //如果待比较命令字符串长度为1,不匹配
                    if(cmpOrder.length==1)
                        continue;
                    else
                        //如果输入命令字符串与待比较命令字符串一一匹配,匹配成功
                        if(cmpOrder[0].startsWith(inputChange[0]))
                            if(cmpOrder[1].startsWith(inputChange[1]))
                            {
                                compitable=cmpOrder;
                                break;
                            }
                }
            }
            //从哈希表中找出命令的执行结果并输出
            if(compitable==null)
                System.out.println("unkown command");
            else if(compitable.length==1)
                System.out.println(command.get(compitable[0]));
            else
                System.out.println(command.get(compitable[0]+" "+compitable[1]));
        }
        sc.close();
    }
}
全部评论
忘记判断两个字符不唯一的情况
2 回复 分享
发布于 2021-01-31 01:32
17行delete和66行unknown英文错了,如果有两个匹配成功的也会正常打印,建议你加个count计数,最后的65行改为if(compitable == null && count > 1)。并且匹配成功的代码块里面让count++,break改为continue即可。代码有很多冗余的判断可以除去(只是建议!嘿嘿)。
4 回复 分享
发布于 2022-08-09 18:18
而且代码通不过呀
2 回复 分享
发布于 2020-08-26 12:02
好像没有判断两个字符串匹配不唯一的情况,比如示例中的第四点输入:a,b;可以加个count变量来计算当匹配两个字符串不唯一时直接返回unkown command;
点赞 回复 分享
发布于 2020-08-26 11:19
首先你需要记录一下两个字符串情况下匹配成功的次数来判断是否符合唯一性条件,其次你有两个单词打错了。
点赞 回复 分享
发布于 2020-09-02 21:31
if (cmpOrder[0].startsWith(inputChange[0])) { compitable = cmpOrder; times++; }
点赞 回复 分享
发布于 2022-01-13 23:20
import java.util.*; public class Main { private static Map<string> map = new LinkedHashMap<string>(); static { 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"); } private static String defaultRes = "unknown command"; public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNextLine()) { String str = sc.nextLine(); String[] strArr = str.split(" "); String results = defaultRes; if(strArr.length == 1) // 只有一个命令字符串 { for(String s1 : map.keySet()) { if(s1.startsWith(str) && s1.split(" ").length == 1) { results = map.get(s1); break; } } } else { //第一个命令串 String com1 = strArr[0]; //第二个命令串 String com2 = strArr[1]; //是否唯一的标志 int flag = 0 ; for(String s1 : map.keySet()) { String[] keyArr = s1.split(" "); if(keyArr.length == 1) { continue; } String key1 = keyArr[0]; String key2 = keyArr[1]; if(key1.startsWith(com1) && key2.startsWith(com2)) { results = map.get(s1); flag ++; } } //匹配不到或者是匹配到多个,都算匹配失败 if(flag == 0 || flag > 1) { results = defaultRes; } } System.out.println(results); } } }</string></string>
点赞 回复 分享
发布于 2022-09-21 12:59 山东

相关推荐

勤劳的香菇求被捞求offer:满帮笔试都不给我发 似乎被卡本了
投递满帮集团等公司10个岗位
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
20 1 评论
分享
牛客网
牛客企业服务