String 拼接那些事儿

String 拼接那些事儿

总结建议

线程安全用StringBuffer;
一般情况用 StringBuilder ;
字符串拼接,通过特定字符分割用StringJoiner ;

String 类型 ,+ 号拼接

String str1 = "a";
str1 = str1 + "b"; 

// 编译后在系统类似于:
// StringBuilder stringBuilder = new StringBuilder();
// stringBuilder.append(str1)
// stringBuilder.append("b")
// stringBuilder.toString();

String 类型 ,append拼接

String str2 = "a";
str2 = str2.concat("b");
// 源码实现:
//  System.arraycopy ---native方法,深拷贝(注意:复杂对象,对象里面的对象是指针)
// 具体实现 1. 新开辟 char[] , 2. copy 源,3. copy 目标,4. 返回

StringBuffer 拼接

StringBuffer str3 = new StringBuffer("a"); 
str3 = str3.append("b");
// 源码注意点:
// 新创建,length 预留+16
// 长度若超过,扩容当前长度*2+2,若还不够,用需要的长度赋值
// 若为NULL,拼接 "null"
// synchronized 的存在,保证了线程安全

StringBuilder 拼接

StringBuilder str3 = new StringBuilder ("a"); 
str3 = str3.append("b");
// 类似StringBuffer ,但是没有加synchronized ,非线程安全

StringJoiner 拼接

StringJoiner str5 = new StringJoiner("-", "start", "end");
str5.add("a");          
str5.add("b");
// 内部用的还是 StringBuilder
// 使用场景 用某个分隔符拼接字符串,可以添加前后缀

Collectors.joining 拼接

 List<String> list = Arrays.asList("A", "B", "C", "D", "[", "]");
 String str6 = list.stream().collect(Collectors.joining(";", "prefix", "suffix"));
 // 内部用的还是 StringJoiner
在C++,可以使用+运算符或append()函数来拼接字符串。引用的代码展示了一些字符串拼接的示例。 使用+运算符: string str1 = "ls"; string str2 = "test.c"; string str3 = str1 + " /tmp/"; // str3的值为"ls /tmp/" string str5 = str1 + " append " + "haha"; // str5的值为"ls append haha" 使用append()函数: string tmp = str1 + " append"; string str5 = tmp.append("haha"); // str5的值为"ls append haha" 另外,引用提到了使用push_back()函数来拼接字符串,这是一种高效的方式。 所以,在C++,可以使用+运算符、append()函数或push_back()函数来进行字符串拼接。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++ String拼接](https://blog.csdn.net/u013105549/article/details/52854368)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [C++ string类型字符串拼接](https://blog.csdn.net/neuzhangno/article/details/128686544)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值