Reputation: 183
Consider a string.
String Str = "Entered number = %d and string = %s"
Let us say I have a list of objects
List<Objects> args = new ArrayList<Objects>();
args.add(1);
args.add("abcd");
Is there any way in which I can substitute these args into Str , so that i get a string like "Entered number = 1 and string = abcd "
?
By generalizing this I was planning to dump all the questions and arguments in a file (like json) and execute them at run time. Please do let me know if there are better ways to do this.
Upvotes: 18
Views: 38226
Reputation: 13083
You can use the following:
String str = "Entered number = %d and string = %s";
List<Object> args = new ArrayList<Object>();
args.add(1);
args.add("abcd");
System.out.println(String.format(str, args.toArray()));
will give the output:
Entered number = 1 and string = abcd
From JLS 8.4.1 Format parameters:
The last formal parameter in a list is special;
it may be a variable arity parameter, indicated by an
elipsis following the type.
If the last formal parameter is a variable arity parameter of type T,
it is considered to define a formal parameter of type T[].
The method is then a variable arity method. Otherwise, it is a fixed arity
method. Invocations of a variable arity method may contain more actual
argument expressions than formal parameters. All the actual argument
expressions that do not correspond to the formal parameters preceding
the variable arity parameter will be evaluated and the results stored
into an array that will be passed to the method invocation.
See this question on StackOverflow!
Upvotes: 8
Reputation: 274888
Try:
String formatted = String.format(str, args.toArray());
This gives:
Entered number = 1 and string = abcd
Upvotes: 35
Reputation: 22822
final String myString = String.format(Str, 1, "abcd");
Use variables as appropriate
Upvotes: 0