是否可以在java中创建类似someFunction("%s, %s, %s", 1, true, "qwe");
的结果,其结果应为1 true qwe
?
我尝试了不同的方法,例如使用PrintStream
和其他一些类,但我无法弄清楚如何去做。
到目前为止,似乎确定的一件事是定义:
public static String prepare(String format, Object... arguments) {
return ???
}
但我无法弄清楚如何做到这一点。你能给我一些建议吗?
答案 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);