java - 区分一字、二字和三字命令
问题描述
现在,我正在使用这种方法来检查用户是否刚刚输入了带有错误参数的命令:
private boolean relatedCommand(String input) {
// make sure the split afterwards has at least size one
if (input.matches(" .*")) {
return false;
}
final String command = input.split(" ".toString())[0];
return COMMAND_PACKAGE
.keySet()
.stream()
.map(Pattern::toString)
.anyMatch(patternText -> patternText.startsWith(command + " ");
}
(COMMAND_PACKAGE 包含所有已注册的命令)
现在,这对于单字命令非常有效。例如。get <argument1> <argument2>
, remove <argument1>
.
但是,我目前正在从事一个同时具有单字和双字命令的项目。以下是一系列不适用于此方法的命令:
add track <argument1>
, add switch <argument1>
, step <argument>
. 在这种情况下,对于 command add track <argument1>
,“track”被视为一个参数,但它实际上属于命令本身。
如果用户只输入“add”,则错误消息是“invalid arguments”。相反,错误信息应该更准确,告诉他这个命令不存在(因为只有“添加轨道”或“添加开关”)。
有谁知道如何区分一个词和两个词的命令?用户还可以使用delete rolling stock <argument>
由三字命令组成的命令。
总而言之,因此有必要区分一个、两个和三个单词的命令。
解决方案
该方法String.split("\s+")
将您在空格处的输入拆分为一个数组。您可以查询该数组的长度,然后您就知道您的输入包含多少个单词。
import java.util.Arrays;
import java.util.Scanner;
class Main
{
public static void main(String[] args)
{
System.out.println("Enter a command");
Scanner in=new Scanner(System.in);
String command=in.nextLine();
String[] parts=command.split("\\s+");
System.out.println("parts="+Arrays.toString(parts));
if (parts.length==0)
{
System.out.println("Zero parts");
}
else if (parts.length==1)
{
System.out.println("One part");
}
else if (parts.length==2)
{
System.out.println("Two parts");
}
else if (parts.length==3)
{
System.out.println("Three parts");
}
else
{
System.out.println("More than three parts");
}
}
}
输出:
Enter a command
a b c
parts=[a, b, c]
Three parts
进程以退出代码 0 结束
推荐阅读
- reactjs - 如何在模态视图中实现反应原生谷歌地方自动完成
- django - 如何在基于 Django 类的视图中更改模板
- regex - Matlab 正则表达式提取值
- php - 如何显示指定日期之间的数据并仅获得这些数据的总和?
- html - 有谁知道为什么我的 Bootstrap 4 订单类不起作用?
- r - 用 ggplot2 添加虚线
- mysql - 如何使用外部数据库浏览器或类似工具访问 ddev 的数据库?
- javascript - 用 ajax 脚本中的 %20 替换空格
- python - Python:分配给变量也分配给类属性?
- visual-studio - TLBIMP 有哪些运行时依赖项?