java - 如何组合Switch语句?

标签 java input switch-statement echo

我是 Java 新手,正在处理学校作业。目标是创建一个 Java 类来模拟 unix 中的 Echo 工具。如果我输入:

java Echo 'i love you'

它将打印:

i love you

然后有两个命令行选项
-n:省略尾随换行符
-e:启用反斜杠转义的解释。
我还需要能够同时使用 -n 和 -e。

到目前为止,我弄清楚了如何分别实现 -n-e 。这是代码:

public class Echo {

    public static void main(String []args) {

        switch (args[0]) {
            case "-n":
                for (int i=1; i<args.length;i++)
                    System.out.print(args[i]);
                break;

            case "-e":
                for (int i=1; i<args.length; i++) {
                    args[i]=args[i].replace("\\t", "\t");
                    args[i]=args[i].replace("\\n","\n");
                    System.out.println(args[i]);
                }
                break;
            default:
                for (int i=0; i<args.length; i++)
                System.out.println(args[i]);
        }
    }    
}

我尝试更改代码,以便能够输入:

java Echo -n -e 'ilove\tyou'

java Echo -e -n 'ilove\tyou'

而且它根本不起作用。这是我的尝试:

public class Echo {

    public static void main(String []args) {

        if ((args[0].equals("-n") || args[0].equals("-e")) && (args[1].equals("-e") ||args[1].equals("-n"))) {
            for (int i=2; i<args.length; i++) {
                args[i]=args[i].replace("\\t", "\t");
                args[i]=args[i].replace("\\n","\n");
                System.out.print(args[i]);
            }
        } else {
            switch (args[0]) {
                case "-n":
                    for (int i=1; i<args.length;i++)
                        System.out.print(args[i]);
                    break;
                case "-e":
                    for (int i=1; i<args.length; i++) {
                        args[i]=args[i].replace("\\t", "\t");
                        args[i]=args[i].replace("\\n","\n");
                        System.out.println(args[i]);
                    }
                    break;
                default:
                    for (int i=0; i<args.length; i++)
                        System.out.println(args[i]);
            }
        }
    }
}

最佳答案

您需要注意标志位于 args[] 中的位置以及字符串的位置。由于 args[] 的长度可以为 1(无标志),因此您不能随意访问 args[1]

正如 the comment by RC 中所述,首先找到标志然后再应用它们的效果要容易得多。我假设标志必须位于字符串之前,因此保证字符串位于最后一个单元格中。从那里,向后寻找标志。

public class Example {

    public static void main(String[] args) {

        boolean hasE = false;
        boolean hasN = false;
        String message = args[args.length - 1];

        for (int i = args.length - 2; i >= 0; i--) {
            switch (args[i]) {
                case "-n": hasN = true; break;
                case "-e": hasE = true; break;
            }
        }

        if (hasE)
            message = message.replace("\\n", "\n").replace("\\t", "\t");
        if (hasN)
            System.out.print(message);
        else
            System.out.println(message);
        System.out.println("Test");
    }
}

注释:

  • 我没有进行输入验证(您没有在作业或代码中提及它,我不想完成整个作业)。提示:检查 args.length 是否为 0 或大于 3。
  • 我假设您只需要转义制表符和换行符。如果您需要转义更多内容,则需要更复杂的正则表达式。
  • 我在末尾添加了一个打印,以便轻松检查 -n 的效果。

关于java - 如何组合Switch语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35542487/

相关文章:

java - 使用固定字节数的java读取文件

java - 如何通过Java降低网速?

javascript - 作为 div 的 radio 输入

css - 输入标题消失

javascript - 处理开关箱

c# - 我可以在 switch 语句中使用变量吗?

c++ - 是否可以将 goto 与 switch 一起使用?

java - 在java中无替换地选择

java - TreeMap 可以用来检索给定键值以上的所有键/值对吗?

c++ - 如何最有效地从用户那里获取 10 个不同的数字,将它们添加到一个数组中,然后输出所有这些数字?