package com.example.datacollect.command; import java.util.HashMap; import java.util.Map; import java.util.Scanner; /** * 命令别名管理器 * 支持将长命令映射为短别名,方便用户输入 */ public class CommandAlias { private Map aliasMap; public CommandAlias() { this.aliasMap = new HashMap<>(); initDefaultAliases(); } /** * 初始化默认别名 */ private void initDefaultAliases() { aliasMap.put("c", "crawl"); aliasMap.put("r", "run"); aliasMap.put("s", "stop"); aliasMap.put("h", "help"); aliasMap.put("q", "quit"); aliasMap.put("l", "list"); aliasMap.put("a", "add"); aliasMap.put("d", "delete"); aliasMap.put("e", "edit"); aliasMap.put("hist", "history"); } /** * 添加自定义别名 * @param alias 别名 * @param command 原命令 */ public void addAlias(String alias, String command) { if (alias != null && command != null) { aliasMap.put(alias.toLowerCase(), command.toLowerCase()); } } /** * 移除别名 * @param alias 要移除的别名 */ public void removeAlias(String alias) { aliasMap.remove(alias.toLowerCase()); } /** * 将别名转换为原命令 * @param input 用户输入 * @return 原命令,如果输入不是别名则返回原输入 */ public String resolveCommand(String input) { if (input == null) { return null; } String trimmed = input.trim().toLowerCase(); return aliasMap.getOrDefault(trimmed, input); } /** * 检查输入是否为别名 * @param input 用户输入 * @return 是否为别名 */ public boolean isAlias(String input) { if (input == null) { return false; } return aliasMap.containsKey(input.trim().toLowerCase()); } /** * 获取所有别名映射 * @return 别名映射的副本 */ public Map getAllAliases() { return new HashMap<>(aliasMap); } /** * 打印所有别名 */ public void printAliases() { System.out.println("===== 命令别名列表 ====="); for (Map.Entry entry : aliasMap.entrySet()) { System.out.println(" " + entry.getKey() + " -> " + entry.getValue()); } System.out.println("========================"); } /** * 简单交互测试主方法 */ public static void main(String[] args) { CommandAlias aliasManager = new CommandAlias(); Scanner scanner = new Scanner(System.in); System.out.println("===== 命令别名测试 ====="); aliasManager.printAliases(); System.out.println("\n输入命令或别名测试(输入 exit 退出):"); while (true) { System.out.print("\n> "); String input = scanner.nextLine().trim(); if ("exit".equalsIgnoreCase(input)) { break; } String resolved = aliasManager.resolveCommand(input); if (!resolved.equals(input)) { System.out.println("别名 '" + input + "' -> 原命令: " + resolved); } else { System.out.println("原命令: " + resolved); } } System.out.println("测试结束"); scanner.close(); } }