0

是否可以在 java 中创建someFunction("%s, %s, %s", 1, true, "qwe");结果应该是这样的东西1 true qwe

我尝试了不同的方法,例如 usingPrintStream和其他一些类,但我不知道该怎么做。

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

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

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

4

4 回答 4

4

您可以使用String.format方法:

public static String prepare(String format, Object... arguments) {
    // do same sanity checks if needed
    return String.format(format, arguments);
}
于 2013-11-02T10:34:59.337 回答
4

这就是这样String.format做的,但我假设您已经知道这一点,并且想构建自己的功能。

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

当您的循环遇到除 之外的'%'字符时,将该字符附加到StringBuilder. 否则,检查下一个字符以获取程序可识别的格式,然后countarguments数组中获取该位置的对象。根据需要格式化对象,并将结果附加到StringBuilder; 增量count

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

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

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

等等。

于 2013-11-02T10:40:58.817 回答
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);
  }

}
于 2013-11-02T10:34:51.623 回答
2

String.format()就是目的

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

在你的情况下,

return String.format(format, arguments);
于 2013-11-02T10:35:25.220 回答