2017-06-13 53 views
0
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.format(URL, "5435534", parameters),它不会收到实际的字符串值,而是全部的对象。

+0

不太清楚你尝试一下,但你尝试看看串API https://docs.oracle.com/javase/8/docs/api/java/lang/String.html? –

+0

我不认为你可以用你想要的方式使用'String.format'方法。您可能需要将循环连同循环一起使用。 –

+0

注意:如果'parameters'是一个String的数组,'parameters [0]'上的'toString()'没有任何用处。 'parameters [0]'将与'parameters [0] .toString()'完全相同。 – ajb

回答

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。这样就不会如果为此。并需要拨出:varargs默认大小为。

+0

这有点棘手。它取决于'toArray()'没有参数的定义返回'Object []'。请参阅[javadoc](http://docs.oracle.com/javase/8/docs/api/java/util/List.html#toArray--)。代码_looks_喜欢它应该返回'String []',这是行不通的,因为'format'被定义为需要一个'Object []'。没有解释性评论,我不会使用这样的代码。 – ajb

+0

@ajb很棒! – RonTr

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而没有循环,但我现在不想看到它们。)

相关问题