格式化字符串,带有未定义的参数个数

时间:2013-11-02 10:33:26

标签: java string arguments formatter

是否可以在java中创建类似someFunction("%s, %s, %s", 1, true, "qwe");的结果,其结果应为1 true qwe

我尝试了不同的方法,例如使用PrintStream和其他一些类,但我无法弄清楚如何去做。

到目前为止,似乎确定的一件事是定义:

public static String prepare(String format, Object... arguments) {
    return ???
}

但我无法弄清楚如何做到这一点。你能给我一些建议吗?

4 个答案:

答案 0 :(得分:4)

您可以使用String.format方法:

public static String prepare(String format, Object... arguments) {
    // do same sanity checks if needed
    return String.format(format, arguments);
}

答案 1 :(得分:4)

这就是String.format的作用,但我认为你已经知道了,并希望建立自己的功能。

您拥有的功能的标题是正确的。现在,您需要将计数器count初始设置为零,创建StringBuilder,然后运行扫描format字符串的循环。

当您的循环遇到'%'以外的字符时,请将该字符附加到StringBuilder。否则,请检查下一个字符以查找程序识别的格式,并从count数组中的arguments位置抓取该对象。根据需要格式化对象,并将结果追加到StringBuilder;增加count

循环结束后,StringBuilder包含您返回给调用者的结果字符串。

当然这只是算法的骨架。真正的实现需要处理许多其他重要的事情,例如

  • 检查循环中的count是否超过arguments数组的末尾
  • 检查最终count是否不小于arguments
  • 中的对象数量
  • 检查格式说明符是否可以应用于arguments数组
  • 中的对象

等等。

答案 2 :(得分:3)

是的,这正是String.format()所做的:

public class Test {

  public static void main(String[] args) {  
    System.out.println(format("%s %s %s", 12, "A", true));
  }

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

}

答案 3 :(得分:2)

这就是String.format()的含义

String.format("%s, %s, %s", 1, true, "666");

在你的情况下,

return String.format(format, arguments);