43

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?

1

6 Answers 6

68

The MessageFormat class looks like what you're after.

System.out.println(MessageFormat.format("{0} + {1} = {2}", x, y, x + y));
Sign up to request clarification or add additional context in comments.

2 Comments

With the caveat that MessageFormat.format does not handle the empty place holder {}.
... and the caveat that if you use '{ it won't recognise the brackets
12

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".

3 Comments

This % based string formatting is similar to old-style formatting used in python, OP is using the new-style string formatting
Ah, 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.
Thanks for the comment btw. Otherwise I wouldn't have understood why @rgettman was getting so many upvotes.
9

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.

Comments

3

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"

Comments

3

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);

1 Comment

I like this approach. But I would put this into a Formatter class with a format method.
2

If you use Log4j 2 (log4j-api) then you can use ParameterizedMessage.

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

or

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.