String的产生原因和具体用法

博客介绍了C++中使用String而非char[]的原因,指出这是C++相比C的进步之处,对String进行了很多实用操作封装。还阐述了String是STL数据类型,介绍了其定义、访问、输入输出等基本概念,以及拼接、比较、求长度等常用函数。
  • 为什么要用String,char[]不好吗?
    用string而不用char[],是C++相比C,进步的地方,C++对string封装了很多实用的操作
  • String是什么数据类型,是原始数据类型还是自定义的呢?
    是STL
  • String都有哪些方法
    如下
String的基本概念
  1. String的定义

    #include<string>
    using namespace std;
    int main()
    {
    	string str = "hello,world.";
    }
    
  2. String的访问

    //1 通过下标
    str[i]
    
    //2 通过迭代器
    string::iterator it;
    
  3. String的输入输出

    //只能用cin, cout
    string str;
    cin>>str; //遇到空格则停止输入,如果想要输入带空格的一行,可以使用char[],然后用gets()函数获得输入
    cout<<str;
    
    //如果一定要用printf
    printf("%s",str.c_str());
    
  4. string的常用函数

    1. 拼接: +=
    2. 字典序比较 : <, >, <=, >=, ==, !=
    3. 求string长度:length(), size()
    4. 插入:insert(pos, string)
    5. 删除元素 : erase(it), erase(begin, end)
    6. 返回子串: substr(pos,len)
    7. 查找子串: find(str)
    8. 查找指定位置后的子串: find(str, pos)
    9. 替换子串: replace(pos, len, str)
### String Buffer String Builder 的用法及区别 #### 1. **String Buffer 的用法** `StringBuffer` 是一个可变的字符序列,支持线程安全的操作。由于其方法被 `synchronized` 关键字修饰,因此适合在多线程环境中使用[^1]。 ##### 基本用法示例: ```java // 创建 StringBuffer 对象 StringBuffer stringBuffer = new StringBuffer("Hello"); // 追加字符串 stringBuffer.append(" World"); // 插入字符串 stringBuffer.insert(5, ","); // 删除部分字符串 stringBuffer.delete(5, 6); // 转换为 String String result = stringBuffer.toString(); System.out.println(result); // 输出: Hello, World ``` --- #### 2. **String Builder 的用法** `StringBuilder` 同样是一个可变的字符序列,但它不提供线程安全性,因此性能优于 `StringBuffer`。适用于单线程环境下的字符串操作[^2]。 ##### 基本用法示例: ```java // 创建 StringBuilder 对象 StringBuilder stringBuilder = new StringBuilder("Hello"); // 追加字符串 stringBuilder.append(" World"); // 插入字符串 stringBuilder.insert(5, ","); // 删除部分字符串 stringBuilder.delete(5, 6); // 转换为 String String result = stringBuilder.toString(); System.out.println(result); // 输出: Hello, World ``` --- #### 3. **两者的区别** | 特性 | `StringBuffer` | `StringBuilder` | |-----------------------|-------------------------------------------------|---------------------------------------------| | **线程安全性** | 提供线程安全(方法被 synchronized 修饰) | 不提供线程安全 | | **性能** | 较低,因同步机制引入额外开销 | 更高,无同步锁带来的开销 | | **适用场景** | 多线程环境 | 单线程环境 | | **继承关系** | 继承自 AbstractString | 继承自 AbstractString | --- #### 4. **为什么选择 StringBuilder 或 StringBuffer?** - 如果程序运行于 **多线程环境** 下,并且需要频繁修改字符串内容,则应优先选用 `StringBuffer`,因其提供了必要的线程安全保障[^1]。 - 若仅限于 **单线程环境**,推荐使用 `StringBuilder`,因为它去除了不必要的同步控制,从而提升了执行效率[^2]。 --- #### 5. **避免使用 String "+" 拼接的原因** 当涉及到大量字符串连接操作时,直接使用 `String` 的 `"+"` 操作符会产生许多临时对象,增加内存负担并降低性能。相比之下,`StringBuilder` 或 `StringBuffer` 可以有效减少这种资源浪费[^3]。 ##### 示例对比: ```java // 使用 "+" 拼接 (低效) String str = ""; for(int i=0; i<10000; i++) { str += "a"; // 每次都会创建新的 String 对象 } // 使用 StringBuilder 拼接 (高效) StringBuilder sb = new StringBuilder(); for(int i=0; i<10000; i++) { sb.append("a"); } String efficientStr = sb.toString(); // 最终转换为 String ``` --- ### 总结 `StringBuffer` `StringBuilder` 都是为了替代不可变的 `String` 类型设计的工具类,在处理动态变化的字符串数据时表现出更高的灵活性效率。具体选择取决于实际应用场景中的并发需求以及性能考量。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值