【发布时间】:2019-01-23 12:49:01
【问题描述】:
我想让用户输入一个命令(例如:transact fromWallet toWallet 12.00),然后从Scanner 中获取不带空格的参数,并将它们传递给变量以使用它们调用特定的方法。我仍在研究它,但我设法在没有 Scanner 提供的方法的情况下从 inputString 中提取参数。 Scanner 太有问题了。它要求我进行 5 个输入,而我只需要 4 个,依此类推。什么是“更好的方法”?我的解决方案好吗?我最终这样做了(请告诉我代码中的“不良做法”):
课堂上的帮助方法:
public static String getNextArg(String s) {
// get last char
int cut = s.indexOf(" ");
if (cut == -1)
cut = s.length();
// split arg
String arg = s.substring(0, cut);
return arg;
}
public static String getLeftOver(String s) {
int cut = s.indexOf(" ");
if (cut == -1)
cut = s.length() - 1;
s = s.substring(cut + 1);
return s;
}
主命令部分:
String cmd = "";
String arg1, arg2, arg3, arg4;
System.out.println("Type your command!");
Scanner cmdScanner = new Scanner(System.in);
do {
cmd = cmdScanner.nextLine();
// Check for "exit"
if (cmd.length() >= 4)
if(cmd.substring(0, 4).equalsIgnoreCase("exit"))
System.exit(0); // Is this a good way to exit a program?
System.out.println("The args passed to cmd are: ");
if (!cmd.trim().isEmpty()) {
arg1 = getNextArg(cmd);
cmd = getLeftOver(cmd);
System.out.println("arg1 = " + arg1);
}
if (!cmd.trim().isEmpty()) {
arg2 = getNextArg(cmd);
cmd = getLeftOver(cmd);
System.out.println("arg2 = " + arg2);
}
if (!cmd.trim().isEmpty()) {
arg3 = getNextArg(cmd);
cmd = getLeftOver(cmd);
System.out.println("arg3 = " + arg3);
}
if (!cmd.trim().isEmpty()) {
arg4 = getNextArg(cmd);
cmd = getLeftOver(cmd);
System.out.println("arg4 = " + arg4);
}
System.out.println("Type your command!");
} while (cmdScanner.hasNext());
}
结果符合我的预期。我只想知道如何使用Scanner 的next() 方法来做到这一点。这可能会有所帮助,因为稍后我想以适当的方式获得“下一个”BigDecimal,而对于像我这样的菜鸟来说,为所有事情实现自己的方法会有点多。
【问题讨论】:
-
cmdScanner.nextLine().split(" "); -
是的,但是我需要使用一个数组。我想将“参数”分配给字符串。
-
你到底想做什么?请提供具有预期输出的示例输入。 这可能会有所帮助,因为稍后我想以适当的方式获得“下一个”BigDecimal——这非常不清楚。
-
我想让用户输入这样的命令:transact fromWallet toWallet 12.00。然后应该调用一个方法,例如: transact(fromWallet, toWallet, new BigDecimal(12.00)); 最后一个参数将是一个 BigDecimal 我就是这样在我的代码中实现了 Money。通过为我的方法获取 arguments 的实现,我将无法以我认为的良好方式获取 BigDecimal。