【问题标题】:Using a Variable Length Argument List for String.format()为 String.format() 使用可变长度参数列表
【发布时间】:2020-06-05 22:18:06
【问题描述】:

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

例如:

模板:"%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;
    }

【问题讨论】:

    标签: java string iterator string-formatting


    【解决方案1】:

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

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

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

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

    你可以找到可以理解的教程here

    【讨论】:

    • 模板不是正确的格式字符串,在我看来 OP 应该用适当的值手动替换占位符
    • @Aaron 这肯定是不正确的,我应该更加注意
    • @ginkul - 这是一个不正确(或部分正确)的解决方案。请检查我的答案以获得正确的解决方案。
    • @ArvindKumarAvinash 是的,这真的不是我的日子......我已经修复了它,现在它确实有效。尽管我犯了明显的错误,但我还是建议您使用 Java 的内置功能,因为它更通用,实现时间更短
    • @ginkul - 事实上,这是你的一天 :) 尽管答案部分正确,但它被接受并赞成,而我的答案甚至没有引起任何人的注意。在我的生活中有很多天,即使是我的弱答案也被接受和支持。另一方面,有几天我的许多优雅的答案都被忽略了。这就是生活的乐趣——有时是快乐,有时是悲伤!祝你成功!
    【解决方案2】:

    我相信你正在寻找这个:

    public String getStringFromTemplate(String template, String... args){
        for (int i=0; i<args.length; i++) {
            String placeholder = "%" + (i+1) + "s";
            String actualValue=args[i];
            template = template.replaceAll(placeholder, actualValue);
        }
        return template;
    }
    

    此代码遍历您的参数,从它们在 args 数组中的索引派生一个占位符,并将此占位符的所有出现替换为模板字符串中参数的实际值。

    你可以try it here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      相关资源
      最近更新 更多