java中的字符串concat

时间:2012-09-04 02:08:27

标签: 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();
}

3 个答案:

答案 0 :(得分:10)

当您致电newStr.concat(tokens[i]);时,修改newStr,它会返回一个新的String,这是连接的结果。你没有对结果做任何事情。

您需要执行以下操作:newStr = newStr.concat(tokens[i]);

String是java中的不可变类型,因此它的方法就是这样,返回一个新的String对象。考虑使用(可变)StringBuilder代替。 StringBuilder维护了一个可以增长的内部缓冲区,因此避免了使用连接和不可变String带来的不必要的Strings副本。

答案 1 :(得分:7)

String是不可变的。当然,String.concat会返回全新的String

  

...创建一个新的String对象,表示一个字符序列,它是由此String对象表示的字符序列和由参数字符串表示的字符序列的串联。

您尝试这样做的方式,代码应该看起来像......

String glued = "";

for (final String token : tokens) {
  glued = glued.concat(token);
}

现在,我对这种方法的问题在于你正在做{em>批次的String数据副本。每个concat复制glued中的所有数据以及token中的数据。现在,考虑一下它的含义...我不是过早优化的粉丝,但我认为实现这一目标的合理方法是使用StringBuilder,如下所示......

final StringBuffer buf = new StringBuffer();
for (final String token : tokens) {
  buf.append(token);
}
final String glued = buf.toString();

答案 2 :(得分:2)

我尝试使用StringBuilder修复它,这是新代码。

private void newString() {
    String str = "Split me"; 
    String[] tokens = str.split("[ ]+");
    StringBuilder newStr = new StringBuilder();

    for(int i=0; i<tokens.length; i++){
        newStr.append(tokens[i]);
    }
    System.out.println("NEW STRING IS : " + newStr);
}