2013-07-29 25 views
5

Tự hỏi nếu nó có thể kết hợp cả một chuỗi đơn và varargs chuỗi trong một String.format(), như thế này:sử dụng kết hợp của String và varargs trong String.format()

String strFormat(String template, String str, String... moreStrs) {  
    return String.format(template, str, moreStrs); 
} 

Nếu tôi gọi ở trên như thế này:

strFormat("%s/%s/%s", "hello", "world", "goodbye"); 

tôi nhận được java.util.MissingFormatArgumentException: Format specifier 's'

này hoạt động:

String strFormat(String template, String... moreStrs) {  
    return String.format(template, moreStrs); 
} 

Cũng như các công trình này:

String strFormat(String template, String str1, String str2) {  
    return String.format(template, str1, str2); 
} 

Có thể được điều này để làm việc?

String strFormat(String template, String str, String... moreStrs) {  
    return String.format(template, str, moreStrs); 
} 

Cảm ơn!

+0

Tại sao bạn muốn thoát ra khỏi một 'str' từ phần còn lại của chuỗi? Bạn đang cố gắng yêu cầu ít nhất một 'str' được thông qua? – rgettman

+0

Không, đó không phải là cách xác định API. Tại sao bạn muốn làm điều đó? –

+0

@rgettman và Jim Garrison: Chỉ tò mò muốn xem liệu nó có hoạt động hay không và muốn biết công việc xung quanh nếu nó không hoạt động. – Bala

Trả lời

5

Bạn có thể làm điều đó như thế này:

String strFormat(String template, String str, String... moreStrs) 
{ 
    String[] args = new String[moreStrs.length + 1]; 

    // fill the array 'args' 
    System.arraycopy(moreStrs, 0, args, 0, moreStrs.length); 
    args[moreStrs.length] = str; 

    return String.format(template, args); 
} 
+0

Cảm ơn, điều đó đã hiệu quả. – Bala

+1

OMFG. Thậm chí còn tệ hơn JavaScript 'arguments'. – Tino

Các vấn đề liên quan