0

我知道String.format()方法与System.out.printf()方法几乎相同,只是它返回一个字符串。但是我几乎找不到关于“格式化”方法的介绍,它的定义如下:

public String formatted(Object... args) {
        return new Formatter().format(this, args).toString();
}

而且我知道下面两个代码的功能是相同的。

String str1 = String.format("%s", "abab");
System.out.println(str1);
String str2;
str2 = "%s".formatted("abab");
System.out.println(str2);

因此,我在徘徊它们之间有什么区别。谢谢!

4

2 回答 2

0

它们之间的主要区别在于 printf() 将格式化的字符串打印到控制台,就像 System. 出去。println() 但是 format() 方法返回一个格式化的字符串,你可以存储或使用你想要的方式。

另一个区别是一个在java.lang.Stringclass 中声明,另一个在 on java.io.PrintStream。如果需要格式化字符串,则应使用String.format()方法,如果需要System.out.printf()在控制台上显示格式化字符串,则应使用。

让我们了解两个要学习的关键内容,首先,您可以使用其中之一printf()format()格式化字符串。它们之间的主要区别在于 printf() 将格式化的字符串打印到控制台很像,System.out.println()但该format()方法返回格式化的字符串,您可以存储或使用您想要的方式。

在 Java 中格式化字符串需要学习的第二个最重要的事情是格式化指令%s, %d, %n等。整个格式化过程基于你给出的指令进行。

// formatting String with dynamic String and Integer input
System.out.printf("length of String %s is %d %n", "abcd", "abcd".length());

这将打印“字符串 abcd 的长度为 4”,您可以看到“abcd”和“4”根据您传递的格式化指令和值动态附加到给定的字符串中。

// re-ordering output using explicit argument indices
System.out.printf("%3$2s, %2$2s, %1$2s %n", "Tokyo", "London", "NewYork" );

这将打印“NewYork, London, Tokyo”,您可以看到,即使您将 Tokyo 作为第一个参数传递,它最后出现在格式化字符串中,因为我们使用显式参数索引重新排序了输出。

// formatting Date to String using %D flag, %D is for MM/dd/yy format
System.out.printf("Date in MM/dd/yy format is %tD %n", new Date());

此示例将打印“日期MM/dd/yy格式为12/07/16",您可以看到今天的日期MM/dd/yy格式很好。这可能是在 Java 中将日期格式化为字符串的最简单方法,它不需要您创建SimpleDateFormat对象并处理自己格式化日期。

于 2022-02-05T04:28:09.267 回答
0

确保您使用良好的 IDE,以便您可以轻松访问以浏览 JDK 源代码。在 Eclipse 中说,使用 F3 打开任何声明。IntelliJ IDEA 具有类似的功能。

如果您查看这两种方法的源代码,您会发现这些调用是相同的,只是在比较实例与静态方法时变量this互换:format

public String formatted(Object... args) {
    return new Formatter().format(this, args).toString();
}
public static String format(String format, Object... args) {
    return new Formatter().format(format, args).toString();
}

正如您所观察到的:String.format(str, args)str.formatted(args)

于 2022-02-05T10:52:42.203 回答