java中的字符串concat

Fir*_*iew 0 java

我试图在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.


old*_*inb 7

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)