我是 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/