首页 > 解决方案 > 为 String.format() 使用可变长度参数列表

问题描述

我得到一个字符串模板和一个可变长度的参数列表。我需要在模板中插入参数并发送结果。

例如:

模板:"%1s test %2s test %1s"

参数:"CAT", "DOG"

结果:"CAT test DOG test CAT"

我试着这样做。但是我得到了一个错误,因为事实上,我正在尝试执行String.format("%1s test %2s test %1s", "value")真正错误的字符串。


    public static void main(String[] args) {
        getStringFromTemplate("%1s test %2s test %1s", "CAT", "DOG");
    }

    public void getStringFromTemplate(String template, String... args){
        ArrayList<String> states = new ArrayList<>();
        Collections.addAll(states, args);
        String s;
        Iterator<String> iter = states.iterator();
        while(iter.hasNext()){
            s = String.format("%1s test %2s test %1s", iter.next());
        }
        rerurn s;
    }

标签: javastringiteratorstring-formatting

解决方案


String.format将第二个参数作为可变参数,因此您可以像这样重写您的代码:

public static String getStringFromTemplate(String template, String ...args) {
    return String.format(template, args);
}

另外,如果你想多次使用一个参数,你应该改变你的模板字符串:

template = "%1$s test %2$s test %1$s";

你可以在这里找到可以理解的教程。


推荐阅读