Rob*_*scu -1 java string.format variadic-functions
请注意以下潜在的愚蠢问题:
我有一个方法,使用String.format()方法格式化一些文本.目前,它接收两个参数,所以我有两个"%s"参数来创建我想要的任何文本.
但有人可能想用我的方法使用3个参数,或4或100.如何将传递的参数的长度作为varargs获取到String.format()方法的长度,以便在传递3个参数的情况下,将有3个"%s"而不是当前的2个; 或4或100.
如何获取传递给String.format()方法的参数数量,以便其中的文本根据需要自动添加"%s"?因为参数只是作为常规参数传递,而不是作为数组或类似的传递.如何获取参数数组的长度?
PS.这很重要 - 我不是在谈论获取(String ...参数) - 没有这样的事情 - 当有人调用你的方法时,它使用实际参数,"String ... arguments"不可用于抓取和获得它的长度.
我意识到这是一个制定得很糟糕的问题,因为我没有在我面前的代码进一步解释,但这已经困扰了我很长一段时间 - 你如何获得传递给方法的参数数量?
对于这样的事情:
String.format(SomeObject.SomeString, param1, param2,...,param 100)
Run Code Online (Sandbox Code Playgroud)
编辑:SomeObject.SomeString声明如下:
String SomeString = "Blah blah %s blah blah blah %s";
所以它有两个正在硬编码的参数.
当有人使用它时,你如何自定义SomeObject.SomeString以便"知道"已经将多少参数传递给String.format()方法(以便SomeObject.SomeString知道动态添加多少%s)?
因为参数只是作为常规参数传递,而不是作为数组传递.
不,这些值作为数组传递,因此您可以编写
public String myVarags(String... args) {
String s = "";
for(int i = 0;i < args.length; i++)
s += "%s ";
return String.format(s, args);
}
Run Code Online (Sandbox Code Playgroud)
它将为每个参数生成一个Stringa %s,然后使用给定的值格式化String.这也是一种非常愚蠢和无用的方法.
varargs表示法只是语法糖,它是运行时的数组.
听起来好像您要访问传递给采用vararg作为参数的另一种方法(该String.format()方法)的参数数量。
如果您无法更改方法中的代码,则无法知道向方法中传递了多少个参数。而且,该String参数肯定不知道传入了多少参数。它是一个完全独立的对象。
您唯一可以做的就是创建包装器方法。您可以采用相同的varargs,然后将它们传递给进行所需String.format()更改的方法。
然后,无论调用什么代码,都String.format()需要调用包装方法。
例:
public String StringFormatWrapper(String...args) {
//perform actions on the args
if (args.length > 1)
args[1] = "Hello World";
//call the String.format() method
return String.format(args)
}
Run Code Online (Sandbox Code Playgroud)
如果您无法访问正在通话的内容,String.format()那么您想做什么就不可能了。
| 归档时间: |
|
| 查看次数: |
5265 次 |
| 最近记录: |