我写了最简单的Hello,World!应用:
public class Helloworld {
public static void main(String[] args) {
System.out.println("Hello\nHello");
}
}
Run Code Online (Sandbox Code Playgroud)
运行时,结果是:
Hello
Hello
Run Code Online (Sandbox Code Playgroud)
但如果我Hello\nHello用作参数,
public class Helloworld {
public static void main(String[] args) {
System.out.println(args[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
结果是Hello\nHello.如何获得两行结果?
Ale*_*x M 14
编辑:这个答案是针对原来的问题理解为
为什么我用
Hello\nHelloJava 编写然后打印它,我得到两行文本,但是当我Hello\nHello在终端中写入并将其作为参数传递给我的Java程序时,我得到一行文本?
如果你的意思是
有没有办法将一个字符串参数传递给我的java程序,它在多行上打印?
请参阅@ DodgyCodeException的答案,它更适合该配方.
在Java中定义Stringas "Hello\nHello"时,它不包含任何'\'字符.它是换行符的转义序列:"\n"只是一个字符.但是,当您使用此字符串作为程序的参数时(因此字符串在外部定义),将"\n"被解释为两个字符:'\'和'n'.你必须用换行符替换这两个字符,知道要匹配'\'你必须用它来逃避它'\':
System.out.println(args[0].replace("\\n", "\n"));
Run Code Online (Sandbox Code Playgroud)
对于可移植性问题,您还可以使用System.lineSeparator()替换字符串.
如果您使用类似Unix的操作系统(如GNU/Linux或MacOS)或任何其他系统上的Bash shell(例如Windows上的Cygwin),那么只需将命令行参数括在单引号中,然后您可以插入任何换行符的数量,它仍将被视为一个参数:
$ java Helloworld 'line one
line two' <-- this is a single argument with an embedded newline
line one <-- it prints out the output on separate lines!
line two
Run Code Online (Sandbox Code Playgroud)
这不适用于默认的Windows命令处理器(cmd.exe).如果是这种情况,您可能希望使用以下技术.
您可以使用Apache Commons Text中的StringEscapeUtils.unescapeJava方法.然后,您将能够传递命令行参数,并将它们解释为[*],就像源代码中的文字字符串一样:
import static org.apache.commons.text.StringEscapeUtils.unescapeJava;
public class Helloworld {
public static void main(String[] args) {
System.out.println(unescapeJava(args[0]));
}
}
Run Code Online (Sandbox Code Playgroud)
[*]禁止Apache方法中的任何剩余错误.
显然你不能马上做到,但做下面的技巧会得到你所需要的:
System.out.println(String.format(args[0]));
Run Code Online (Sandbox Code Playgroud)
这里使用String#format ,新行作为新行的转换序列传递.(请参阅格式字符串语法).
所以用你的程序打电话
java Helloworld "hello%nnworld"
Run Code Online (Sandbox Code Playgroud)
将打印
hello
workd
Run Code Online (Sandbox Code Playgroud)
如果你需要输出%n自己,那么你可以引用'%'和另一个'%'即
java Helloworld "hello%%nnworld"
Run Code Online (Sandbox Code Playgroud)
以上将打印:
hello%nnworld
Run Code Online (Sandbox Code Playgroud)