格式化包含许多字符串和整数的long system.out.print

Dra*_*eel 0 java

假设您有以下内容:

String cake = "whatever";
int cakeNumber = 509;
String whyNot = "another string";
double number = 1;

system.out.println("I like "+ cake +" and I eat " + cakeNumber + " blah blah     prolonging this string because " + whyNot + " and so on " + number + ".");
Run Code Online (Sandbox Code Playgroud)

所以,这没有多大意义,也没有必要,因为它只是一个例子.我的问题是这个,给定多个字符串和变量,它们之间带有"加号",看起来就像一团糟.是不是有办法格式化这个println或者通过减少加号来整理它?

RAn*_*s00 6

java.lang.StringBuilder

System.out.println(new StringBuilder("I like")
                   .append(cake)
                   .append(" and I eat ")
                   .append(cakeNumber)
                   .append(" blah blah     prolonging this string because ")
                   .append(whyNot)
                   .append(" and so on ")
                   .append(number)
                   .append(".")
                   .toString());
Run Code Online (Sandbox Code Playgroud)

java.text.MessageFormat

System.out.println(MessageFormat.format("I like {0} and I eat {1} blah blah    prolonging this string because {2} and so on {3}.",
                   cake, cakeNumber, whyNot, number));
Run Code Online (Sandbox Code Playgroud)

我喜欢静态导入,如下所示:

import static java.text.MessageFormat.format;

System.out.println(format("I like {0} and I eat {1} blah blah    prolonging this string because {2} and so on {3}.",
                   cake, cakeNumber, whyNot, number));
Run Code Online (Sandbox Code Playgroud)

java.util.Formatter(也称为String.format)

System.out.printf("I like %s and I eat %d blah blah    prolonging this string because %s and so on %f.%n",
                  cake, cakeNumber, whyNot, number);
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到很多语法选择(只是列出一些,可能还有更多):

System.out.format(...)
System.out.printf(...)
System.out.print(String.format(...)) // you will need to include the line break in the format
System.out.println(String.format(...)) // line break will be caused by println()
import static java.lang.String.format;
System.out.print(format(...))
System.out.println(format(...))
System.out.println(new Formatter().format(...))
Run Code Online (Sandbox Code Playgroud)

%n表示系统的特定换行符.这是必需的,因为printf在操作后不会自动插入换行符.


多行字符串连接

System.out.println("I like " + cake + " and I eat " +
                   cakeNumber + " blah blah    prolonging this string because" +
                   whyNot + " and so on " + number + ".");
Run Code Online (Sandbox Code Playgroud)