java笔试题--Java实现命令编辑器
2012-10-09 23:27
369 查看
题目:假定有一命令编辑框,可以接受两种命令:【type x】和【undo n】。x代表输入文本,n代表秒数。type命令用于当输入文本,而undo命令用于撤销操作。输入undo 1,表示向前撤销1秒。撤销操作可以指定撤销到当前时间之前操作的时间,并且撤销操作对自身同样有效。
例子:
实现代码如下:
例子:
命令输入的时间 | 命令 | 显示结果 |
1 | type a | a |
2 | type b | ab |
3 | type c | abc |
4 | undo 1 | ab |
5 | undo 1 | a |
package javatest; import java.util.HashMap; import java.util.Map; class CmdException extends RuntimeException { private static final long serialVersionUID = 8562504939570096319L; public CmdException() { super(); } public CmdException(String message, Throwable cause) { super(message, cause); } public CmdException(String message) { super(message); } public CmdException(Throwable cause) { super(cause); } } /** * @author NiluChen * */ public class CommandEditor { private static final String TYPE_PATTERN = "\\s*(type|TYPE)\\s+\\w+\\s*"; private static final String UNDO_PATTERN = "\\s*(undo|UNDO)\\s+\\d+\\s*"; /** * * @param cmds 命令 * @param times 时间点 * @return String 返回结果 * @throws IllegalArgumentException */ public static String cmdEditor(String[] cmds, int[] times) throws IllegalArgumentException { // 使用map缓存了每次操作后的时间点和结果 Map<Integer, String> resultBuffer = new HashMap<Integer, String>(); // 文本内容 String text = ""; for (int i = 0; i < cmds.length; i++) { String cmd = cmds[i].trim(); if (cmd.matches(CommandEditor.TYPE_PATTERN)) { String[] strs = cmd.split("\\s+"); text += strs[1]; resultBuffer.put(times[i], text); } else if (cmd.matches(CommandEditor.UNDO_PATTERN)) { int undoTime = Integer.parseInt(cmd.split("\\s+")[1]); if (undoTime > times[i]) throw new CmdException("参数不合法!"); // 撤销时间点 int rollbackTime = times[i] - undoTime - 1; // 执行撤销 while (!resultBuffer.containsKey(rollbackTime)) rollbackTime--; resultBuffer.put(times[i], resultBuffer.get(rollbackTime)); } else throw new CmdException("参数不合法!"); } return resultBuffer.get(times[times.length - 1]); } /** * @param args */ public static void main(String[] args) { String[] cmds = { "type a", "type btg", "type c", "undo 1", "undo 2" }; int[] times = { 1, 2, 3, 4, 5 }; String result = CommandEditor.cmdEditor(cmds, times); System.out.println(result); System.out.println(result.equals("abtg")); } }
相关文章推荐
- Java实现DOS中的Copy命令
- 批处理文件工具(java+shell命令实现)
- 今日头条3月24笔试题java实现
- Java实现远程联接服务器执行shell命令
- 2017搜狐笔试题(Java实现)
- 去哪网笔试 最短路径算法(词梯) Java实现
- JAVA_WEB项目(结合Servlet+jsp+ckEditor编辑器+jquery easyui技术)实现新闻发布管理系统第二篇:登陆和注销功能实现
- JAVA_WEB项目(结合Servlet+jsp+ckEditor编辑器+jquery easyui技术)实现新闻发布管理系统第三篇:新闻发布,新闻修改,新闻删除功能的实现
- java实现堆排序(2016年腾讯内推笔试的一道算法题)
- Java实现linux的“tail -f”命令
- JSch:纯JAVA实现远程执行SSH2主机的SHELL命令
- 使用Java来实现编辑器的Undo Redo功能
- 【GOF23设计模式】_命令模式_数据库事务机制底层架构实现_撤销和回复JAVA246
- 链家笔试题--java实现两个大整数相乘的算法
- java实现liunx,windows命令的调用
- 2016阿里巴巴笔试编程题用java和js 实现形如dssd-sdssd 转换成 DssdSdssd
- 去哪儿2015笔试题JAVA实现
- 一个java笔试题的实现:用5位字符表示日期,并且要求500年不能重复
- 用java实现一道c笔试题
- 利用java实现可远程执行linux命令的小工具