Я хотел, чтобы пользователь набрал команду (например: transact fromWallet toWallet 12.00
), а затем получил аргументы без пробелов из Scanner
и передал их переменным для вызова определенных методов с ними. Я все еще работаю над этим, но мне удалось извлечь аргументы из inputString без методов, которые предоставляет Scanner. 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
надлежащим образом, и реализация собственных методов для всего будет немного для такого нуба, как я.