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
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();
|
|
}
|
|
}
|