如何使用换行符

时间:2018-09-26 11:57:06

标签: java

我写了最简单的 Hello,World!应用程序:

public class Helloworld {

    public static void main(String[] args) {
        System.out.println("Hello\nHello");
    }
}

运行时,结果为:

Hello
Hello

但是如果我使用Hello\nHello作为参数,

public class Helloworld {

    public static void main(String[] args) {
        System.out.println(args[0]);
    }
}

结果为Hello\nHello。如何获得两行结果?

3 个答案:

答案 0 :(得分:14)

编辑:此答案适用于原始问题,理解为

  

当我用Java编写Hello\nHello然后打印它时,会得到两行文本,但是当我在终端中编写Hello\nHello并将其作为参数传递给Java程序时,为什么会这样呢?我收到一行文字?

如果您是故意的

  

是否可以将一个字符串参数传递给在多行中打印的java程序?

请参见@DodgyCodeException的answer,它更适合该公式。


在Java中将String定义为"Hello\nHello"时,它不包含'\'字符。这是换行符的转义序列:"\n"只是一个字符。 但是,当您将此字符串用作程序的参数时(因此该字符串定义为 outside ),"\n"被解释为两个字符:'\'和{{1} }。您必须用换行符替换这两个字符,知道要匹配'n',必须用'\'对其进行转义:

'\'

出于便携性的考虑,您还可以使用System.out.println(args[0].replace("\\n", "\n")); 作为替换字符串。

答案 1 :(得分:9)

如果您使用的是类似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

这不适用于默认的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]));
    }

}

[*]排除Apache方法中所有剩余的错误。

答案 2 :(得分:6)

显然您不能立即做到,但是执行以下技巧可以满足您的需求:

System.out.println(String.format(args[0]));

在此使用String#format并将新行作为新行的转换顺序传递。 (请参见format string syntax)。

所以用

调用程序
java Helloworld "hello%nnworld"

将打印

hello
workd

并且如果您需要自己输出%n,则可以用另一个'%'引述'%',即

java Helloworld "hello%%nnworld"

上面将打印:

hello%nnworld