java中的字符串连接
Posted
技术标签:
【中文标题】java中的字符串连接【英文标题】:String concat in java 【发布时间】:2012-08-28 16:03:03 【问题描述】:我正在尝试在字符串中连接字符串数组值,下面的代码不起作用
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();
【问题讨论】:
why concat() is not working here? , java 的可能重复项 尝试将 split() 中的正则表达式从[ ]+
更改为 \\s+
,以遵循 Javadocs 预定义的 patterns。
【参考方案1】:
当您调用newStr.concat(tokens[i]);
时,此不会修改newStr
,它返回一个新的String
,这是串联的结果。你没有对结果做任何事情。
您需要执行以下操作:newStr = newStr.concat(tokens[i]);
String
在java中是一个不可变类型,所以它的方法是这样工作的,返回一个新的String
对象。考虑改用(可变)StringBuilder
。 StringBuilder
维护一个可以增长的内部缓冲区,因此避免了使用连接和不可变 Strings
带来的不必要的 String
副本。
【讨论】:
有趣,pb2q...我们在同一时间发布。【参考方案2】:String
是不可变的。当然,String.concat
返回一个全新的String
。
...创建了一个新的
String
对象,表示一个字符序列,该字符序列是此String
对象表示的字符序列和参数字符串表示的字符序列的串联。
按照您尝试的方式,代码应该看起来像...
String glued = "";
for (final String token : tokens)
glued = glued.concat(token);
现在,我使用这种方法遇到的问题是,您正在制作String
数据的大量副本。每个concat
复制glued
中的所有数据以及token
中的数据。现在,想想它的含义……我不喜欢过早优化,但我相信实现这一目标的合乎逻辑的方法是使用StringBuilder
,如下所示……
final StringBuffer buf = new StringBuffer();
for (final String token : tokens)
buf.append(token);
final String glued = buf.toString();
【讨论】:
【参考方案3】:我尝试用 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);
【讨论】:
以上是关于java中的字符串连接的主要内容,如果未能解决你的问题,请参考以下文章
Java 中 toString() 中的 StringBuilder 与字符串连接