2017-06-13 59 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而沒有循環,但我現在不想看到它們。)

相關問題