Kotlin加密解密程序命令行参数解析问题求助
加密解密程序的命令行参数解析方案
核心思路:手动遍历参数数组
无需依赖第三方库,通过遍历命令行参数数组,逐个匹配选项并提取对应值,完全支持参数任意顺序,同时满足默认值规则:
- 默认模式为
enc,默认密钥为0,默认数据为空字符串 - 遇到
-mode/-key/-data时,提取紧随其后的参数作为对应值 - 处理边界情况(如选项后无值、密钥非整数),保持默认值不变
完整代码示例
public class CryptoProgram { public static void main(String[] args) { // 初始化默认参数 String mode = "enc"; int key = 0; String data = ""; // 遍历解析所有参数 for (int i = 0; i < args.length; i++) { switch (args[i]) { case "-mode": if (i + 1 < args.length) { mode = args[i + 1]; i++; // 跳过已读取的参数值 } break; case "-key": if (i + 1 < args.length) { try { key = Integer.parseInt(args[i + 1]); } catch (NumberFormatException e) { System.err.println("无效的密钥格式,将使用默认值0"); } i++; } break; case "-data": if (i + 1 < args.length) { data = args[i + 1]; i++; } break; default: System.err.println("未知参数:" + args[i]); } } // 调用已实现的加解密逻辑 String result = processCrypto(mode, key, data); System.out.println(result); } // 替换为你已完成的加解密逻辑 private static String processCrypto(String mode, int key, String data) { StringBuilder result = new StringBuilder(); for (char c : data.toCharArray()) { if ("enc".equals(mode)) { result.append((char) (c + key)); } else if ("dec".equals(mode)) { result.append((char) (c - key)); } else { result.append(c); // 未知模式直接返回原字符 } } return result.toString(); } }
代码说明
- 参数遍历:通过
for循环逐个检查每个参数,匹配到选项后立即读取下一个参数作为值,并通过i++跳过已处理的值 - 默认值保障:所有参数初始化为默认值,只有当有效选项存在且对应值合法时才更新
- 异常处理:针对密钥的整数转换异常做捕获,避免程序崩溃,同时提示用户使用默认值
- 兼容性:无论参数顺序如何(如
-data在前、-mode在后),都能正确解析
内容的提问来源于stack exchange,提问作者Tibor Tóth
相关产品推荐
相关产品推荐

