如何在 Java 中使用占位符进行字符串格式化(如在 Python 中)?

Posted

技术标签:

【中文标题】如何在 Java 中使用占位符进行字符串格式化(如在 Python 中)?【英文标题】:How to do string formatting with placeholders in Java (like in Python)? 【发布时间】:2013-07-06 09:50:09 【问题描述】:

我是 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 中复制相同的东西?

【问题讨论】:

【参考方案1】:

Java 有一个与此类似的String.format 方法。 Here's an example of how to use it. 这是 documentation reference,它解释了所有这些 % 选项可以是什么。

这是一个内联示例:

package com.sandbox;

public class Sandbox 

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

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

【讨论】:

这种基于%的字符串格式类似于python中使用的old-style formatting,OP使用的是new-style string formatting 啊,从这个问题我不知道他如此强调使用大括号。我以为他只是想要一种在不将字符串和变量连接在一起的情况下格式化字符串的方法。 感谢您的评论。否则我不会明白为什么@rgettman 会获得如此多的支持。【参考方案2】:

你可以这样做(使用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"

【讨论】:

【参考方案3】:

MessageFormat 类看起来像您所追求的。

System.out.println(MessageFormat.format("0 + 1 = 2", x, y, x + y));

【讨论】:

需要注意的是MessageFormat.format 不处理空占位符 ... 并且需要注意的是,如果您使用 ',它将无法识别括号【参考方案4】:

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

【讨论】:

【参考方案5】:

如果你想使用空占位符(没有位置),你可以在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);

【讨论】:

【参考方案6】:

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

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

new ParameterizedMessage(" ", x, y).getFormattedMessage(); // there is trimming

【讨论】:

以上是关于如何在 Java 中使用占位符进行字符串格式化(如在 Python 中)?的主要内容,如果未能解决你的问题,请参考以下文章

Java日志格式应该是占位符还是字符串拼接

Java 占位符使用 和 修饰符

java中占位符

java中有啥方法可以读取占位符的字符串,并且把占位符替换成参数

如何使用格式化占位符本地化字符串?

如何在格式字符串中设置占位符的颜色