How to do string formatting with placeholders in Java (like in Python)?
Solution 1
The MessageFormat
class looks like what you're after.
System.out.println(MessageFormat.format("{0} + {1} = {2}", x, y, x + y));
Solution 2
Java has a String.format method that works similarly to this. Here's an example of how to use it. This is the documentation reference that explains what all those %
options can be.
And here's an inlined example:
package com.sandbox;
public class Sandbox {
public static void main(String[] args) {
System.out.println(String.format("It is %d oclock", 5));
}
}
This prints "It is 5 oclock".
Solution 3
Slf4j has MessageFormatter.format() that accepts {}
without the argument number, just like Python. Slf4j is a popular logging framework, but you don't have to use it for logging to use MessageFormatter.
Solution 4
You can do this (using 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"
Solution 5
If you want to use empty placeholders (without positions), you could write a small utility around Message.format()
, like this
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));
}
And then, can use it like,
print("{} + {} = {}", 4, 5, 4 + 5);
user1757703
Updated on January 04, 2022Comments
-
user1757703 over 2 years
I am new to Java and am from Python. In Python we do string formatting like this:
>>> x = 4 >>> y = 5 >>> print("{0} + {1} = {2}".format(x, y, x + y)) 4 + 5 = 9 >>> print("{} {}".format(x,y)) 4 5
How do I replicate the same thing in Java?
-
Ashwini Chaudhary almost 11 yearsThis
%
based string formatting is similar to old-style formatting used in python, OP is using the new-style string formatting -
Rana Ghosh almost 11 yearsAh, from the question I didn't know he was putting that much emphasis on using curly brackets. I thought he just wanted a way to format a string without concatenating strings and variables together.
-
Rana Ghosh almost 11 yearsThanks for the comment btw. Otherwise I wouldn't have understood why @rgettman was getting so many upvotes.
-
Jesse Chisholm over 7 yearsWith the caveat that
MessageFormat.format
does not handle the empty place holder{}
. -
I.G. Pascual over 7 years... and the caveat that if you use
'{
it won't recognise the brackets