当 String 参数在 Kotlin 中以破折号 (-) 开头时避免 org.apache.commons.cli.UnrecognizedOptionException
Avoid org.apache.commons.cli.UnrecognizedOptionException when String argument starts with dash (-) in Kotlin
我正在用 Kotlin 编写莫尔斯电码翻译程序,对于输入,我使用 main 方法的参数:
fun main(args: Array<String>)
我使用 org.apache.commons.cli 来管理命令选项(-d 进行解码,-e 进行编码)。问题是,当输入摩尔斯电码时,程序会将其与命令选项混淆(因为它使用破折号)。
程序使用示例:
morse-translator -d --. .- .
Returns:
Exception in thread "main" org.apache.commons.cli.UnrecognizedOptionException: Unrecognized option: --.
我附上处理命令选项的class:
import org.apache.commons.cli.CommandLine
import org.apache.commons.cli.DefaultParser
import org.apache.commons.cli.Options
class Input(args: Array<String>) {
private var flags: Options = Options()
private var parser: DefaultParser = DefaultParser()
private var cli: CommandLine
init {
setupOptions()
cli = parser.parse(flags, args)
}
/** Determine the flags allowed */
private fun setupOptions() {
flags.addOption("e", "encode", false, "Encode message")
flags.addOption("d", "decode", false, "Decode message")
}
}
我试过用双引号将摩尔斯电码括起来,但同样的问题。
Commons-cli 观察 Unix 上的默认解决方案,指定“--”以指示命令行解析器不应解析更多选项。
以下 Java 代码片段在参数列表中包含“--”,然后它将字符串正确解析为尾随参数:
Options options = new Options();
options.addOption("d", "decode", false, "Decode message");
options.addOption("e", "encode", false, "Encode message");
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(options, new String[] {"-d", "--", "--. .- ."});
assertTrue(cmd.hasOption("d"));
assertFalse(cmd.hasOption("e"));
assertEquals("[--. .- .]", cmd.getArgList().toString());
assertEquals("[--. .- .]", Arrays.toString(cmd.getArgs()));
我正在用 Kotlin 编写莫尔斯电码翻译程序,对于输入,我使用 main 方法的参数:
fun main(args: Array<String>)
我使用 org.apache.commons.cli 来管理命令选项(-d 进行解码,-e 进行编码)。问题是,当输入摩尔斯电码时,程序会将其与命令选项混淆(因为它使用破折号)。
程序使用示例:
morse-translator -d --. .- .
Returns:
Exception in thread "main" org.apache.commons.cli.UnrecognizedOptionException: Unrecognized option: --.
我附上处理命令选项的class:
import org.apache.commons.cli.CommandLine
import org.apache.commons.cli.DefaultParser
import org.apache.commons.cli.Options
class Input(args: Array<String>) {
private var flags: Options = Options()
private var parser: DefaultParser = DefaultParser()
private var cli: CommandLine
init {
setupOptions()
cli = parser.parse(flags, args)
}
/** Determine the flags allowed */
private fun setupOptions() {
flags.addOption("e", "encode", false, "Encode message")
flags.addOption("d", "decode", false, "Decode message")
}
}
我试过用双引号将摩尔斯电码括起来,但同样的问题。
Commons-cli 观察 Unix 上的默认解决方案,指定“--”以指示命令行解析器不应解析更多选项。
以下 Java 代码片段在参数列表中包含“--”,然后它将字符串正确解析为尾随参数:
Options options = new Options();
options.addOption("d", "decode", false, "Decode message");
options.addOption("e", "encode", false, "Encode message");
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(options, new String[] {"-d", "--", "--. .- ."});
assertTrue(cmd.hasOption("d"));
assertFalse(cmd.hasOption("e"));
assertEquals("[--. .- .]", cmd.getArgList().toString());
assertEquals("[--. .- .]", Arrays.toString(cmd.getArgs()));