题目描述

有6条配置命令,它们执行的结果分别是:

命   令 执   行
reset reset what
reset board board fault
board add where to add
board delet no board at all
reboot backplane impossible
backplane abort install first
he he unkown command

注意:he he不是命令。

为了简化输入,方便用户,以“最短唯一匹配原则”匹配:
1、若只输入一字串,则只匹配一个关键字的命令行。例如输入:r,根据该规则,匹配命令reset,执行结果为:reset what;输入:res,根据该规则,匹配命令reset,执行结果为:reset what;
2、若只输入一字串,但本条命令有两个关键字,则匹配失败。例如输入:reb,可以找到命令reboot backpalne,但是该命令有两个关键词,所有匹配失败,执行结果为:unkown command
3、若输入两字串,则先匹配第一关键字,如果有匹配但不唯一,继续匹配第二关键字,如果仍不唯一,匹配失败。例如输入:r b,找到匹配命令reset board,执行结果为:board fault。

4、若输入两字串,则先匹配第一关键字,如果有匹配但不唯一,继续匹配第二关键字,如果唯一,匹配成功。例如输入:b a,无法确定是命令board add还是backplane abort,匹配失败。
5、若输入两字串,第一关键字匹配成功,则匹配第二关键字,若无匹配,失败。例如输入:bo a,确定是命令board add,匹配成功。
6、若匹配失败,打印“unkown command”

输入描述:
多行字符串,每行字符串一条命令
输出描述:
执行结果,每条命令输出一行
输入例子:
reset
reset board
board add
board delet
reboot backplane
backplane abort
输出例子:
reset what
board fault
where to add
no board at all
impossible
install first

我的分析:

1、首先判断是一字符还是两字符,这样可以知道是否是  reset串。

2、如果是两字符,首先用split分割串,然后需要去分别匹配已知命令,这里其实需要判断

1)是否只匹配一个命令? 如果匹配多个命令,那就是unknown

2)是否匹配不到任何命令,那更是unkown了

然后我的代码,写完,一次ac,我还有点儿惶恐..... 但是我觉得代码不够优雅:

import java.util.*;public class Main{public static void main(String args[]){Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {String s=scanner.nextLine();System.out.println(Func(s));}scanner.close();}public static String Func(String s){String s1="reset";String s2="reset board";String s3="board add";String s4="board delete";String s5="reboot backplane";String s6="backplane abort";String reset="reset what";String reset_board="board fault";String board_add="where to add";String board_delete="no board at all";String reboot_backplane="impossible";String backplane_abort="install first";String others="unkown command";boolean a=s.contains(" ");if(a){String [] sa = s.split(" ");int count=0;String result="";String [] s22=s2.split(" ");String [] s33=s3.split(" ");String [] s44=s4.split(" ");String [] s55=s5.split(" ");String [] s66=s6.split(" ");if(s22[0].startsWith(sa[0])&&s22[1].startsWith(sa[1])){result=reset_board;count++;}else if(s33[0].startsWith(sa[0])&&s33[1].startsWith(sa[1])){result=board_add;count++;}else if(s44[0].startsWith(sa[0])&&s44[1].startsWith(sa[1])){result=board_delete;count++;}else if(s55[0].startsWith(sa[0])&&s55[1].startsWith(sa[1])){result=reboot_backplane;count++;}else if(s66[0].startsWith(sa[0])&&s66[1].startsWith(sa[1])){result=backplane_abort;count++;}if(count==1){return result;}else{return others;}}else{if(s1.startsWith(s)){return reset;}elsereturn others;}}}

不够优雅主要是太多太多String的定义了,代码看着很杂乱,而且写的重复性很高,

来看看大神是怎么做的吧?

大神为什么不用startsWith? 我觉得很方便啊

不过还是学到了,应该用HashMap去存String,确实,这样看起来代码能够更加简洁一些,键值对啊!!为什么不用HashMap呢,我个猪脑子哎、

链接:https://www.nowcoder.com/questionTerminal/ca6ac6ef9538419abf6f883f7d6f6ee5
来源:牛客网import java.util.*;public class Main {public static boolean isMatch(String src, String des){char[] c1 = src.toCharArray();char[] c2 = des.toCharArray();int i = 0;while(i < c1.length && i < c2.length){if(c1[i] == c2[i])i++;elsebreak;}if(i == c1.length)return true;elsereturn false;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);HashMap<String, String> hMap = new HashMap<>();hMap.put("reset", "reset what");hMap.put("reset board", "board fault");hMap.put("board add", "where to add");hMap.put("board delet", "no board at all");hMap.put("reboot backplane", "impossible");hMap.put("backplane abort", "install first");while (scanner.hasNext()) {String[] strs = scanner.nextLine().split(" ");int count = 0; // 记录匹配个数Set<String> set = hMap.keySet();String key = "";for(String s : set){String[] temps = s.split(" ");if(temps.length == strs.length){int i = 0;while(i < temps.length){if(isMatch(strs[i], temps[i]))i++;elsebreak;}if(i == temps.length){ // 找到匹配key = s;count++;}                       }}if(count != 1)System.out.println("unkown command");elseSystem.out.println(hMap.get(key));}scanner.close();}
}

Java实现配置文件恢复 匹配相关推荐

  1. [JS] [编程题] 配置文件恢复

    [编程题]配置文件恢复 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M 链接:https://www.nowcoder.com/questionTerminal/ ...

  2. java 读取配置文件工具_java读取配置文件信息properties的工具类

    java读取配置文件信息properties的工具类,介绍一个工具PropertyReader.java,读取项目配置文件信息 package mymail; import java.io.File; ...

  3. java读取配置文件详解

    目录 使用类加载器加载配置文件 ServletContext方式 读取web.xml配置 前言: 1 这是一个java读取配置文件的方法集合,只有常见的方式 2 围绕的内容大部分是读取properti ...

  4. java编程括号匹配,Java正则表达式括号内容匹配

    Java正则表达式括号内容匹配 工作中碰到的一些问题与解决方法记录下来以备不时之需 商品品名规定英文括号正则表达式拆分规则 .*? :所有内容 [1-9] :整数数字1到9 \d :0到9 \d* : ...

  5. java自定义配置文件_基于java读取并引用自定义配置文件

    基于java读取并引用自定义配置文件 首先在resources目录创建自定义的配置文件 配置文件的格式: 写工具类,得到配置参数 import java.io.IOException; import ...

  6. java从配置文件中读取参数

    java从配置文件中读取参数的方式 有的时候我们需要将一些固定的配置信息写到yml文件中去,然后在类中在读取 #首先就得先在yml文件中配置参数 upload:param:"test&quo ...

  7. java密码复杂度匹配规则

    java密码复杂度匹配规则 在开发中经常需要验证字符串是否匹配纯数字,纯大写,纯小写,大写小写数字特殊字符等任意两种,特别是在密码复杂度匹配时,现添加工具类校验字符串是否满足规则 import cn. ...

  8. Java 定时任务配置文件

    作者:LoveEmperor-王子様 Java 定时任务配置文件 配置文件: <?xml version="1.0" encoding="UTF-8"?& ...

  9. 【java】——配置文件报错:不允许有匹配 [xX][mM][lL] 的处理指令目标。

    在逆向工程生成的时候,运行主函数,在调用配置文件的时候报了一个关于错误,具体的错误如下. 错误显示配置文件第一行报错,第一行数据固定的格式 <?xmlversion="1.0" ...

最新文章

  1. python高级网络编程_python高级编程——网络编程(二)
  2. Java数据结构和算法:234树和外部存储
  3. DFTug - Getting Started(下篇)
  4. 计算机MCI风险快速筛查系统,轻度认知障碍风险快速筛查工具的测算过程及判别效果分析...
  5. 盘点2020国内本科开设人工智能专业高校
  6. 微服务架构系列二:密码强度评测的实现与实验
  7. django基础入门(1)django基本配置
  8. Linux学习笔记(四)之用户登录
  9. 京东回应拖欠神州 3 亿多元货款;苹果考虑将第三方浏览器和邮件设为默认;PS 诞生 30 周年| 极客头条...
  10. 生产大数据集群架构图
  11. oppo手机android文件夹,使用OPPO手机,这3个功能一定要关闭,不然你的手机会越来越卡...
  12. chm文件导入java_chm文件无法打开-解决方法
  13. android 入门记录
  14. 案例:使用pre_trained模型进行VGG
  15. APICloud:让开发移动应用像拼积木一样简单
  16. 安装算量软件快速计算管道管件功能
  17. zz:几天猎头生活的感想
  18. 京东云无线宝可以服务器吗,京东云无线宝哪种上网方式收益最高,这点你一定得知道...
  19. lanmp centOS7 一键式 搭建配置
  20. Piggy Back

热门文章

  1. 【干货】PPT制作看这一篇就够了
  2. 计算机远程控制的ppt样本,计算机网络-远程控制课件.ppt
  3. 带时效性的条形码_条形码的各位数字代表什么含义
  4. 人机对战?学会Python简直开挂!
  5. 视频直播技术详解之推流和传输
  6. C语言-轻松掌握|struct结构体|知识点
  7. 如何做好销售数据分析?
  8. Redmi K50 Pro还没发就被大V安利出去3台,或于3月正式发布
  9. Matplotlib笔记 · 绘图区域的结构和子图布局与划分(figure, axes, subplots)
  10. java中的静态成员变量_java中什么叫静态成员变量