我有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
答案 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());
就这么简单!