我试图在String中连接String数组值,下面的代码不起作用
private void newString() {
String str = "Split me";
String[] tokens = str.split("[ ]+");
String newStr = new String();
for(int i=0; i<tokens.length; i++){
newStr.concat(tokens[i]);
}
System.out.println("NEW STRING IS : " + newStr);
}
public static void main(String[] args){
Main m = new Main();
m.newString();
}
Run Code Online (Sandbox Code Playgroud)
pb2*_*b2q 10
当你调用newStr.concat(tokens[i]);这个不修改newStr,它返回一个新的String是串联的结果.你没有对结果做任何事情.
你需要做一些事情: newStr = newStr.concat(tokens[i]);
String是java中的不可变类型,因此它的方法就像这样工作,返回一个新String对象.考虑使用(可变)StringBuilder代替.StringBuilder维护一个可以增长的内部缓冲区,从而避免String使用串联和不可变所带来的不必要的副本Strings.
String是不可改变的.当然,String.concat回归一个全新的String.
...
String创建一个新对象,表示一个字符序列,它是由该String对象表示的字符序列和由参数字符串表示的字符序列的串联.
你尝试这样做的方式,代码看起来应该像......
String glued = "";
for (final String token : tokens) {
glued = glued.concat(token);
}
Run Code Online (Sandbox Code Playgroud)
现在,我对这种方法的问题在于你正在做大量的String数据副本.每个都concat复制所有数据glued以及数据token.现在,考虑一下它的含义...我不是过早优化的粉丝,但我相信实现这一目标的合理方法是改为使用StringBuilder如下......
final StringBuffer buf = new StringBuffer();
for (final String token : tokens) {
buf.append(token);
}
final String glued = buf.toString();
Run Code Online (Sandbox Code Playgroud)