40

我是 Java 新手,来自 Python。在 Python 中,我们像这样进行字符串格式化:

>>> x = 4
>>> y = 5
>>> print("{0} + {1} = {2}".format(x, y, x + y))
4 + 5 = 9
>>> print("{} {}".format(x,y))
4 5

如何在 Java 中复制相同的东西?

4

6 回答 6

63

MessageFormat门课看起来像你所追求的。

System.out.println(MessageFormat.format("{0} + {1} = {2}", x, y, x + y));
于 2013-07-08T22:52:32.997 回答
12

Java 有一个与此类似的String.format方法。 这是一个如何使用它的示例。 这是解释所有这些选项的文档参考。%

这是一个内联示例:

package com.sandbox;

public class Sandbox {

    public static void main(String[] args) {
        System.out.println(String.format("It is %d oclock", 5));
    }        
}

这将打印“现在是 5 点”。

于 2013-07-08T22:46:09.023 回答
6

Slf4j 有MessageFormatter.format()接受{}没有参数编号,就像 Python 一样。Slf4j 是一个流行的日志记录框架,但您不必使用它进行日志记录即可使用 MessageFormatter。

于 2019-08-04T16:37:30.890 回答
1

您可以这样做(使用String.format)

int x = 4;
int y = 5;

String res = String.format("%d + %d = %d", x, y, x+y);
System.out.println(res); // prints "4 + 5 = 9"

res = String.format("%d %d", x, y);
System.out.println(res); // prints "4 5"
于 2013-07-08T22:50:35.330 回答
1

如果你想使用空的占位符(没有位置),你可以在 周围写一个小工具Message.format(),像这样

    void print(String s, Object... var2) {
        int i = 0;
        while(s.contains("{}")) {
            s = s.replaceFirst(Pattern.quote("{}"), "{"+ i++ +"}");
        }
        System.out.println(MessageFormat.format(s, var2));
    }

然后,可以像这样使用它,

print("{} + {} = {}", 4, 5, 4 + 5);
于 2020-05-26T12:56:40.067 回答
0

如果您使用 Log4j 2( log4j-api),那么您可以使用ParameterizedMessage.

ParameterizedMessage.format("{} {}", new Object[] {x, y});

或者

new ParameterizedMessage("{} {}", x, y).getFormattedMessage(); // there is trimming
于 2022-01-04T07:16:53.620 回答