private String createURI (String URL , String... parameters) {
if (parameters != null && parameters.length > 0) {
return String.format(URL, "5435534", "John" , parameters[0].toString());
}
return String.format(URL, "5435534", "John");
}
我创建了一个方法,该方法应该支持获取URL或URL +附加参数,并通过传递的值从中创建URL。 当然,URL中%s的数量应符合参数的数量。
我这样使用它:
createURI ("%s/call/%s")
==> 5435534 /呼叫/约翰
createURI ("%s/call/%s/%s" , "familyName")
==> 5435534 /呼叫/约翰/ familyName
我不想创建这样的东西:
String createURI (String URL , String parameter)
当我不想使用它时只传递空字符串,然后检查方法是否为空文本,并按下一种方式调用方法:
createURI ("%s/call/%s" , "")
createURI ("%s/call/%s/%s" , "FamilyName")
我的问题是如何通过将接收到的参数发送到String.format方法而不显式发送[0]项来改进它 - 我不想检查值String.format
已经这样做但是对于String值。如果我只是按原样传递参数(键入String ...)到String.format(URL, "5435534", parameters)
,它就不会收到实际的字符串值,而是完整的对象。
答案 0 :(得分:1)
private String createURI (String URL , String... parameters) {
ArrayList<String> strs = new ArrayList<>();
strs.add("5435534");
strs.add("John");
strs.addAll(Arrays.asList(parameters);
return String.format(URL, strs.toArray());
}
您可以加入所有参数到列表,并将其转换为String.format
的数组。这种方式不会 if 。并且需要呼出:varargs
默认大小为 0 。
答案 1 :(得分:0)
String.format()
(没有Locale
参数)有两个参数:格式字符串和Object
数组:
public static String format(String format,
Object... args)
由于第二个参数使用...
表示法,因此您可以使用两个选项来传递第二个参数:要么可以传递Object[]
,要么可以传递零个或多个任何类型的参数然后将捆绑到Object[]
。这是唯一的两个选择。你不能说,传递两个参数,然后传递一个方法将看到的数组作为第三个,第四个等参数。该数组将被视为一个参数。
但是,您可以创建自己的Object[]
数组,设置数组的前两个元素,然后复制其余部分,例如:
Object[] formatParameters = new Object[parameters.length + 2];
formatParameters[0] = "5435534";
formatParameters[1] = "John";
for (int i = 0; i < parameters.length; i++) {
formatParameters[i + 2] = parameters[i];
}
return String.format(URL, formatParameters);
请注意formatParameters
必须为Object[]
才能实现(我不认为它适用于String[]
)。这是为了让编译器意识到你正在传递一个参数数组,而不是一个类型恰好是数组的单个参数。
(注意:Arrays
中的方法应该可以在没有循环的情况下从parameters
复制到formatParameters
,但我现在不想查找它们。 )