当我尝试添加分割字符串时,为什么我得到一个空字符串?

时间:2015-04-17 13:03:33

标签: java string split

我有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

4 个答案:

答案 0 :(得分:5)

String ab = null;更改为String ab = "";

作为补充,请参阅Concatenating null strings in Java以了解使用String ab = null;

时发生的情况

答案 1 :(得分:1)

它给出null,因为在java的String类下面是String类的valueOf api的实现。

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

答案 2 :(得分: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());

答案 3 :(得分: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());

就这么简单!