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…我们正好在同一时间发布。