Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的字符串concat_Java - Fatal编程技术网

java中的字符串concat

java中的字符串concat,java,Java,我正在尝试将字符串数组值合并到字符串中,下面的代码不起作用 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]); }

我正在尝试将字符串数组值合并到字符串中,下面的代码不起作用

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();
}
private void newString(){
String str=“拆分我”;
字符串[]标记=str.split([]+”;
字符串newStr=新字符串();

对于(int i=0;i当您调用
newStr.concat(tokens[i]);
时,它不会修改
newStr
,它会返回一个新的
字符串,这是连接的结果。您不会对结果做任何处理

您需要执行如下操作:
newStr=newStr.concat(令牌[i]);


<代码> string <代码>是java中不可变的类型,所以它的方法是这样工作的,返回新的<代码>字符串对象。相反,
StringBuilder
维护一个可以增长的内部缓冲区,从而避免使用串联和不可变的
字符串所带来的不必要的
字符串
副本。
字符串
是不可变的。自然地,返回一个全新的
字符串

…将创建一个新的
String
对象,该对象表示一个字符序列,该字符序列是此
String
对象表示的字符序列与参数字符串表示的字符序列的串联

按照您尝试的方式,代码应该看起来像

String glued = "";

for (final String token : tokens) {
  glued = glued.concat(token);
}
现在,这种方法的问题是,你要复制大量的
字符串
数据。每个
concat
都会复制
胶合
中的所有数据以及
令牌
中的数据。现在,想想这意味着什么……我不喜欢过早优化,但我相信实现这是要改为使用如下

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

我尝试用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);
}
private void newString(){
String str=“拆分我”;
字符串[]标记=str.split([]+”;
StringBuilder newStr=新的StringBuilder();

对于(int i=0;i可能的重复项,请尝试将split()中的正则表达式从
[]+
更改为
\\s+
,以遵循Javadocs预定义的规则。有趣的是,pb2q…我们正好在同一时间发布。