java 如何扫描字符串中的“arguments”并去掉空格?

uujelgoq  于 2023-05-27  发布在  Java
关注(0)|答案(1)|浏览(108)

我想让用户输入一个命令(例如: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());
}

结果符合我的期望。我只是想知道如何使用Scannernext()方法来实现这一点。这可能是有帮助的,因为稍后我想以适当的方式获得“下一个”BigDecimal,并且为所有内容实现自己的方法对于像我这样的新手来说有点多。

xdnvmnnf

xdnvmnnf1#

public static void main(String... obj) {
    try (Scanner scan = new Scanner(System.in)) {
        final Pattern whiteSpace = Pattern.compile("\\s+");
        System.out.println("Type your command!");

        do {
            String[] args = whiteSpace.split(scan.nextLine().trim());

            if (args.length == 1 && "exit".equalsIgnoreCase(args[0]))
                return;

            for (int i = 0; i < args.length; i++)
                System.out.println("arg" + (i + 1) + " = " + args[i]);

            System.out.println("Type your command!");
        } while (scan.hasNext());
    }
}

相关问题