为什么我尝试添加拆分后的字符串时得到空字符串?
Why i'm getting a null string when i try to add the splitted string?
我有 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
将String ab = null;
更改为String ab = "";
作为补充,请参阅 Concatenating null strings in Java 了解使用 String ab = null;
时发生的情况
此外 - 字符串是不可变的,因此您在执行此方法期间创建了很多不必要的对象。改为使用可变 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());
让我强调一下 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());
就这么简单!
它给出空值是因为在下面的java的String class中是String class.
的valueOf api的实现
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
我有 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
将String ab = null;
更改为String ab = "";
作为补充,请参阅 Concatenating null strings in Java 了解使用 String ab = null;
此外 - 字符串是不可变的,因此您在执行此方法期间创建了很多不必要的对象。改为使用可变 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());
让我强调一下 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());
就这么简单!
它给出空值是因为在下面的java的String class中是String class.
的valueOf api的实现public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}