2013-07-30 22 views
0

有一個字符串數組,row[],我想在它們之間放置分隔符。我想保持秩序,因此,例如,如果Java打印一個巨大的字符串數組,因爲它是

row[0] was "Gold", 
row[1] was "Costly", 
row[2] was NULL, 
row[3] was NULL, 
row[5] was "Bronze", 
row[6] was "Cheaper", 

我想保留NULL值當我把一個分隔符,比如\ t時的字符串數組英寸所以我的新字符串應該像

'Gold \t Costly \t \t Bronze \t Cheaper'. 

我可以這樣做

'System.out.println(row[0] + "\t" + row[1] +"\t" +row[2]+.......' 

但問題是字符串數組超過120長。有一個更好的方法嗎? (我不能使用for循環,因爲我把它放在一個映射器中與其他東西)。如果它是String.format(),你能告訴我該怎麼做嗎?

+2

可以使你的問題可讀?寫出清晰明確的問題是獲得正確幫助的第一步。 –

+0

從性能的角度來看,關鍵是如果你打算在這裏推出自己的產品(而且我建議你使用一個預先製作的庫,比如@Ted Hopp提到的Guava庫),你想使用StringBuilder因爲你連接了兩個以上的東西,而不是原始字符串連接。 (僅適用於2,在大多數情況下+都很好)。 – Tim

回答

3

標準API沒有這方面的內容。有幾個第三方軟件包有一個「連接」方法,可以做你想做的事(然後是一些)。一個特別好的是番石榴的Joiner。 (根據Tim的評論,Apache Commons Lang庫中的StringUtils.join()方法也可以滿足您的所有需求。)使用良好的第三方庫可以使很多這些編碼問題消失。

如果您不希望(或不允許)使用第三方庫,你可以寫來連接使用您選擇的分隔符元素的方法:

public static String join(String[] data, String delimiter) { 
    StringBuilder sb = new StringBuilder(); 
    if (data != null && data.length > 0) { 
     for (String item : data) { 
      sb.append(String.valueOf(item); 
      sb.append(delimiter); 
     } 
     // chop off the last delimiter 
     sb.setLength(sb.length() - delimiter.length()); 
    } 
    return sb.toString(); 
} 

然後你就可以無論您要使用字符串連接表達式,都可以使用join()。例如:

System.out.println(join(row, "\t")); 
+1

Apache Commons Lang有一個[StringUtils.join()](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/ commons/lang3/StringUtils.html#join%28java.lang.Iterable,%20java.lang.String%29)方法,它的功能非常相似。但是你應該使用爲這種用例預先構建的東西;重新發明像這樣的基本車輪幾乎不是一個好主意,因爲這浪費了你的時間,並且存在很高的風險,即你的實現不會像你可以使用的庫那樣好。 – Tim

+1

@Tim - 我同意避免重新發明輪子。但是,有時候,開發人員被限制使用第三方庫,甚至是像Apache Commons或Guava這樣的好的庫。 –

+0

@TedHopp謝謝你指出這一點。我在這樣的環境中工作,當人們重新開始工作或者至少討論實施時,我總是非常有用,以便我們重新發明。 – JBuenoJr

1

您應該使用for環路,則:

String[] row = {"123",null,"ABC"}; 
StringBuilder sb = new StringBuilder(); 
for(String s : row){ 
    if(s != null){ 
    sb.append(s); 
    } 

    sb.append("\t"); 
} 
System.out.println("Your result string : "+sb.toString()); 

此打印:

Your result string : 123  ABC 
+0

OP想要_retain_ NULL值。此外(根據示例),字符串的末尾不應有分隔符;就在元素之間。 –