当前位置: 首页 > article >正文

C#中的string和stringbuild

C#中的string

在 C# 中,字符串是一种非常常用的数据类型,用于表示文本信息。C# 中的字符串是通过 System.String 类实现的,它是 .NET Framework 类库中 System 命名空间下的一个类。以下是一些关于 C# 字符串的重要特性和常用操作:

字符串的特性

  1. 不可变性:C# 中的字符串是不可变的,这意味着一旦创建了一个字符串对象,你就不能更改它的内容。对字符串的任何修改都会创建一个新的字符串对象。

  2. 引用类型:尽管字符串在很多情况下表现得像值类型,但它实际上是一个引用类型。

  3. 字面量:可以通过双引号 " 定义字符串字面量,如 string name = "HSL";

  4. Unicode 编码:C# 字符串使用 Unicode 编码(UTF-16),可以存储任何字符。

常用字符串操作

  1. 连接:使用 + 运算符或 string.Concat 方法连接字符串。

    string greeting = "Hello, " + "world!";
    string greeting2 = string.Concat("Hello, ", "world!");

  2. 比较:使用 ==!= 运算符进行值比较,或使用 String.Compare 进行更复杂的比较。

    bool areEqual = "Hello" == "hello"; // False, case-sensitive

  3. 长度和索引:使用 Length 属性获取字符串长度,通过索引访问特定字符。

    int length = "Hello".Length;
    char firstChar = "Hello"[0]; // 'H'

  4. 查找和替换:使用 IndexOfLastIndexOfReplace 等方法。

    int index = "Hello".IndexOf('e'); // 2
    string replaced = "Hello".Replace("e", "a"); // "Hallo"

  5. 拆分和分割:使用 Split 方法将字符串分割为字符串数组。

    char[] delimiters = { ' ' }; // Define delimiter
    string[] words = "Hello world".Split(delimiters); // ["Hello", "world"]

  6. 去除空白:使用 TrimTrimStartTrimEnd 方法去除字符串两端或一端的空白字符。

    string trimmed = "  Hello  ".Trim(); // "Hello"

  7. 转换大小写:使用 ToUpperToLower 方法转换字符串的大小写。

    string upper = "Hello".ToUpper(); // "HELLO"
    string lower = "HELLO".ToLower(); // "hello"

  8. 格式化:使用 string.Format 方法或插值字符串($"")进行字符串格式化。

    string name = "HSL";
    string formatted = string.Format("Hello, {0}!", name); // "Hello, HSL!"
    string interpolated = $"Hello, {name}!"; // "Hello, HSL!"

  9. 插入和删除:使用 InsertRemove 方法在特定位置插入或删除字符。

    string inserted = "Hello".Insert(5, " world"); // "Hello world"
    string removed = "Hello".Remove(5); // "Hell"

  10. 填充和填充空白:使用 PadLeftPadRight 方法填充字符串。

    string paddedLeft = "1".PadLeft(3, '0'); // "001"
    string paddedRight = "1".PadRight(3, '0'); // "100"

  11. 截取子字符串:使用 Substring 方法截取字符串的一部分。

    string sub = "Hello".Substring(1, 3); // "ell"

  12. 检查内容:使用 ContainsStartsWithEndsWith 方法检查字符串内容。

    bool startsWithH = "Hello".StartsWith("He"); // True
    bool endsWithO = "Hello".EndsWith("o"); // True

  13. 正则表达式:使用 System.Text.RegularExpressions 命名空间下的 Regex 类进行复杂的模式匹配和操作。

C#中的stringbuild

在 C# 中,StringBuilderSystem.Text 命名空间中的一个类,它提供了一种可变长度的字符串。与不可变的 string 类型不同,StringBuilder 允许你修改字符串内容而不创建新的字符串实例,这使得在频繁修改字符串内容的情况下更加高效,尤其是在循环中构建字符串时。

以下是 StringBuilder 的一些常用操作和用法:

创建 StringBuilder 实例

using System.Text;
​
StringBuilder sb = new StringBuilder();

追加字符串

sb.Append("Hello, ");
sb.AppendLine("world!");

插入字符串

sb.Insert(7, "beautiful ");

替换字符串

sb.Replace("world", ".NET");

删除字符串

sb.Remove(0, 5); // 删除从索引 0 开始的 5 个字符

清空 StringBuilder

sb.Clear();

获取字符串

string result = sb.ToString();

指定容量和最大容量

StringBuilder sbWithCapacity = new StringBuilder(100); // 初始容量为 100
StringBuilder sbWithCapacityAndMax = new StringBuilder(100, 1000); // 初始容量为 100,最大容量为 1000

使用 StringBuilder 的示例

using System.Text;
​
StringBuilder sb = new StringBuilder();
​
for (int i = 0; i < 10; i++)
{
    sb.Append("Number: ").Append(i).AppendLine();
}
​
string output = sb.ToString();
Console.WriteLine(output);

在这个例子中,StringBuilder 用于构建一个包含 10 行数字的字符串,每行格式为 "Number: [数字]"。

性能注意事项

  • StringBuilder 在频繁修改字符串内容的场景下比字符串拼接(使用 +string.Concat)更高效,因为它避免了创建多个中间字符串实例。

  • 当你知道字符串最终的大小或至少是一个大概的估计时,指定初始容量可以减少内存分配的次数,从而提高性能。

  • 使用 StringBuilderClear 方法重用同一个实例,而不是每次需要时都创建一个新的实例。

C#中的stringbuild和string的区别

在 C# 中,StringBuilderstring 都是处理文本数据的类,但它们在设计和用途上有一些重要的区别:

string 类

  • string 是一个不可变的引用类型,表示文本的序列。

  • 每次对 string 进行修改(如连接、替换等操作)时,都会创建一个新的 string 对象。

  • 由于 string 的不可变性,频繁修改字符串(特别是在循环中)可能会导致性能问题,因为每次修改都会生成新的字符串对象,增加内存分配和垃圾收集的压力。

StringBuilder 类

  • StringBuilder 是一个可变的类,位于 System.Text 命名空间中。

  • 它允许你修改字符串的内容而不创建新的字符串对象,这使得它在频繁修改字符串内容的场景下(如循环中构建字符串)更加高效。

  • StringBuilder 提供了一系列方法,如 AppendInsertRemoveReplace,用于修改字符串内容。

  • StringBuilder 有一个 Capacity 属性,它定义了可以存储的最大字符数。当超出容量时,会自动增加容量。

使用场景

  • 对于少量的字符串操作,或者不需要频繁修改字符串内容的场景,使用 string 是合适的,因为它提供了简洁的语法和足够的性能。

  • 对于需要频繁修改字符串内容的场景,如循环中构建大量文本,或者在处理非常大的文本数据时,推荐使用 StringBuilder 以提高性能和减少内存使用。

示例

以下是使用 stringStringBuilder 的简单示例:

使用 string 连接
string result = "";
for (int i = 0; i < 1000; i++)
{
    result += i.ToString();
}
使用 StringBuilder
using System.Text;
​
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
    sb.Append(i.ToString());
}
​
string result = sb.ToString();

在这个例子中,使用 StringBuilder 可以避免创建多个中间 string 对象,从而提高性能。

总结来说,选择 string 还是 StringBuilder 取决于你的具体需求和性能要求。对于大多数简单的字符串操作,string 是足够的。但是,如果你需要在性能敏感的环境中构建或修改大量文本,StringBuilder 是更好的选择。


http://www.kler.cn/news/305561.html

相关文章:

  • 图文讲解HarmonyOS应用发布流程
  • 3290. 最高乘法得分
  • Thinkphp5 + Swoole实现邮箱异步通知
  • 重新认识一下JNIEnv
  • 【学习笔记】SSL密码套件的选择
  • 微信小程序-formData使用
  • VSCode C++ Tasks.json基本信息介绍
  • PDF——压缩大小的方法
  • HC-SR501人体红外传感器详解(STM32)
  • 【笔记】CCF直播:《如何在国际会议上有效交流》(2024-9-15)
  • rust解说
  • Vue介绍、窗体内操作、窗体间操作学习
  • 9.11 codeforces Div 2
  • SOME/IP通信协议在汽车业务具体示例
  • c# sqlhelper类
  • lvgl | guider应用笔记
  • java项目之网上商城系统设计与实现(源码+文档)
  • Tomcat_WebApp
  • 020、二级Java选择题综合知识点(持续更新版)
  • 树莓派Pico2(RP2350)开发环境搭建
  • Linux内核初始化过程中加载TCP/IP协议栈
  • ios xib 子控件约束置灰不能添加约束
  • 【modou网络库】Reactor架构与TCP通信机制分析
  • 基于hispark_taurus开发板示例学习OpenHarmony编译(1)
  • 记录工作中遇到的问题(持续更新~)
  • TikTok云手机解决运营效率低、封号问题
  • QT消息对话框学习
  • 用户登陆网址都发生了什么?
  • 网络原理1-传输层
  • [mysql]mysql的运算符