在java中使用可变数量的参数进行字符串格式化

2022-09-03 04:04:07

考虑一个字符串。

String Str = "Entered number = %d and string = %s"

假设我有一个对象列表

List<Objects> args = new ArrayList<Objects>();
args.add(1);
args.add("abcd");

有没有办法将这些args替换为Str,以便我得到一个像这样的字符串?"Entered number = 1 and string = abcd "

通过推广这一点,我计划将所有问题和参数转储到一个文件(如json)中,并在运行时执行它们。如果有更好的方法可以做到这一点,请让我知道。


答案 1

尝试:

String formatted = String.format(str, args.toArray());

这给出了:

Entered number = 1 and string = abcd

答案 2

您可以使用以下命令:

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

将给出输出:

Entered number = 1 and string = abcd

来自 JLS 8.4.1 格式参数

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.

StackOverflow上看到这个问题!