You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

129 lines
3.4 KiB

package com.example.datacollect.command;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/**
* 命令别名管理器
* 支持将长命令映射为短别名,方便用户输入
*/
public class CommandAlias {
private Map<String, String> 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<String, String> getAllAliases() {
return new HashMap<>(aliasMap);
}
/**
* 打印所有别名
*/
public void printAliases() {
System.out.println("===== 命令别名列表 =====");
for (Map.Entry<String, String> 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();
}
}