2015-04-17 27 views
0

我有splited一個字符串,並從收到的字符串我試圖形成一個字一切都罰款正在添加,但每次我得到null字符串中的第index爲什麼呢?爲什麼我在嘗試添加拆分字符串時收到空字符串?

這裏是我的代碼:

String assetClasses = "Gold:Stocks:Fixed Income:Commodity:Interest Rates"; 
    String[] splits = assetClasses.toString().split(":"); 

    //System.out.println("splits.size: " + splits.length); 
    String ab = null; 
for(int i=0; i<splits.length;i++){ 
    System.out.println(splits[i]); 
    ab+=splits[i]; 
} 
System.out.println(ab); 

輸出:

Gold Stocks Fixed Income Commodity Interest Rates

nullGoldStocksFixed IncomeCommodityInterest Rates

+3

你爲什麼要在字符串上調用'toString()'? – JonK

+0

因爲我希望字符串是唯一的代碼是我動態交談,把它放在sqlite的分貝的一些操作 – silverFoxA

+1

日期也許是null,因爲你來了空? – immibis

回答

5

變化String ab = null;String ab = "";

作爲補充,看到Concatenating null strings in Java知道,當您使用String ab = null;

+0

天上感謝很多:) – silverFoxA

+3

@Hell:作爲一個小紙條,雖然上面將工作,連接字符串時,建議您使用'StringBuilder' 。 – npinti

+0

哦,謝謝這對我有用,我只需要日期字符串是一個把它作爲唯一的ID在我的數據庫 – silverFoxA

0

還發生了什麼 - 字符串是不可改變的,所以會製造不必要的對象的很多的這種方法執行過程中。使用可變的StringBuilder代替:

String assetClasses = "Gold:Stocks:Fixed Income:Commodity:Interest Rates"; 
    String[] splits = assetClasses.split(":"); 

    StringBuilder ab = new StringBuilder(); 
    for (int i = 0; i < splits.length; i++) { 
     System.out.println(splits[i]); 
     ab.append(splits[i]); 
    } 
    System.out.println(ab.toString()); 
0

讓我強調npinti說什麼。字符串在java中是不可變的。這意味着每次你說ab+=splits[i];你正在創建一個新的字符串。這是一個非常緩慢和低效的過程。

相反,你可以;

String assetClasses = "Gold:Stocks:Fixed Income:Commodity:Interest Rates"; 
String[] splits = assetClasses.toString().split(":"); 

//System.out.println("splits.size: " + splits.length); 
StringBuilder ab = new StringBuilder(); 
for(int i=0; i<splits.length;i++){ 
    System.out.println(splits[i]); 
    ab.append(splits[i]); 
} 
System.out.println(ab.toString()); 

它那麼簡單!

1

它給了空,因爲下面在Java中的String類是String類的valueOf API的實現。

public static String valueOf(Object obj) { 
     return (obj == null) ? "null" : obj.toString(); 
} 
相關問題