Kotlin程序的命令行参数

rxztt3cl  于 2023-02-05  发布在  Kotlin
关注(0)|答案(1)|浏览(198)

我坚持了一个项目。这是一个加密-解密程序。但是为了复杂化,它使用命令行参数而不是用户输入。我解决了用户输入部分。但是这部分对我来说真的很难。目标如下:
目标程序必须解析三个参数:- mode、-key和-data。第一个参数应该确定程序的模式(enc表示加密,dec表示解密)。第二个参数是整数密钥,用于修改消息,第三个参数是文本或密文,用于加密/解密。
参数被保证传递给程序。如果由于某种原因,它们被证明是错误的:
如果没有-模式,程序应该在enc模式下工作;如果没有-键,程序应认为它是0;如果没有-data,程序应该假设data是一个空字符串。请记住,参数的顺序可能不同。例如,-mode enc可能在数组的末尾、开头或中间。
实施例实施例1:加密;这些论据是:- mode enc-key 5-data "欢迎来到超级技能!"
%年%月
java-jar programName.jar-mode enc-key 5-data "欢迎来到hyperskill!"这样程序输入\jqhtrj % yt % m~ujwxpnqq &但是如果程序以例如java-jar programName.jar-data "欢迎来到hyperskill!"-mode enc-key 5开始,如何实现同样的输入呢??编解码部分在前一阶段完成,提前感谢!

vfh0ocws

vfh0ocws1#

假设命令行参数总是以-nameOfArgument的格式出现,然后紧跟参数本身,下面是一个简单的方法,对于更复杂的命令行选项,我建议使用kotlinx-cli这样的解析器库。
由于这个假设,你总是会在传递给main的arguments数组中找到偶数个元素,你可以把这个数组chunked变成每个有2个元素的列表,然后associate把这两个元素变成一个Map

fun main(args: Array<String>) {
    val argsMap = args.toList().chunked(2).associate { it[0] to it[1] }
}

然后,argsMap["-mode"]得到模式,argsMap["-key"]得到键,它们也可以是null,这意味着参数不被传递。

相关问题