C#中的string和stringbuild

news/2024/9/18 22:24:34/ 标签: c#

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.ppmy.cn/news/1526289.html

相关文章

①MongoDB基本知识①

MongDB属于非关系型数据库一派&#xff0c;没有固定的数据格式存储&#xff0c;是一个具备高性能、高拓展的文档型数据库&#xff0c;数据以BSON(JSON的二进制)的格式存储。 特点: 基于对象模型&#xff0c;关系简单。没有外键的约束&#xff0c;也没有强连接表的关系&#x…

8. Transforms的使用(三)-- Resize

Transforms的使用&#xff08;三&#xff09; 1. 为什么要使用Resize 在模型的训练过程中往往需要图片数据的维度相同&#xff0c;才能适应深度学习模型中的相关神经网络结构&#xff0c;这时候就需要使用Resize保证所有的图片保持相同的尺寸 2. 使用Resize调整图片的尺寸 在…

VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025

VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025 VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版) ESXi 7.0U3 标准版集成 Intel 网卡、Realtek USB 网卡 和 NVMe 驱动 请访问原文链…

华为od手撕-数组元素top1

题目描述 查找一个数组中出现最多次数的值&#xff0c;如果存在相同的数量则输出较大的值。 解题思路 数据结构&#xff1a;哈希表 过程描述&#xff1a;在遍历数组过程中 1&#xff09;使用count记录每个值出现的次数 2&#xff09;使用maxlen,maxnum分别记录当前的最大次…

项目:构建高可用、负载均衡的高效Web服务器

一、项目需求 实现高可用&#xff0c;防止单点故障&#xff0c;实现负载均衡 负载均衡&#xff1a;将流量分摊给一个或多个后端服务器&#xff0c;提高公司业务的可用性、方便业务后期的水平动态扩展。 二、项目描述 本项目旨在构建一个集高可用性、负载均衡、高效Web服务及…

Redis 在 Spring Boot 项目中的实际应用及问题解决

引言 Redis 是一款开源的内存数据库&#xff0c;因其卓越的性能、丰富的数据类型以及强大的功能&#xff0c;广泛应用于各种应用场景中&#xff0c;尤其在分布式系统中扮演着缓存、消息队列和分布式锁等重要角色。在 Spring Boot 项目中&#xff0c;Redis 作为缓存层和锁机制&…

基于HTML5的下拉刷新效果

基于HTML5的下拉刷新效果 效果示例图示例代码 效果示例图 示例代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport&quo…

Linux下的gcc与gdb

目录 Linux下的gcc与gdb 代码编译与链接 函数库 gdb介绍和安装 gdb基本使用指令 示例代码 debug模式和release模式 基本指令 进入gdb调试与显示调试代码 创建断点与删除断点 启用和禁用断点 执行代码 逐语句和逐过程调试 断点跳转 显示指定变量以及对应内容 打印变量的值 执行到…

复杂情感识别系统

复杂情感识别系统&#xff08;CERS&#xff09;是一种先进的技术平台&#xff0c;旨在通过分析情感的组合、相互关系及其动态变化来解读和识别复杂的情感状态。这种系统通常采用以下技术和方法&#xff1a; 机器学习与深度学习&#xff1a; 通过训练算法识别和解释大量情感数据…

【Linux】调试和Git及进度条实现

这里是阿川的博客&#xff0c;祝您变得更强 ✨ 个人主页&#xff1a;在线OJ的阿川 &#x1f496;文章专栏&#xff1a;Linux入门到进阶 &#x1f30f;代码仓库&#xff1a; 写在开头 现在您看到的是我的结论或想法&#xff0c;但在这背后凝结了大量的思考、经验和讨论 目录 1.…

Sitecore 定时任务使用介绍

一、简介 Sitecore 定时任务是 Sitecore CMS 中一个重要的功能&#xff0c;它允许在特定时间自动执行一系列操作或任务。这些任务可以用于多种场景&#xff0c;如内容发布、索引重建、日志清理、数据库维护等。 在 Sitecore 中可以使用两种类型的定时任务&#xff0c;一是定时…

Ubuntu 不重装系统增加交换空间大小

目录 一、设置交换文件 二、删除重新创建交换文件 一、设置交换文件 1、创建新的交换文件 使用 dd 命令创建一个新的交换文件。例如&#xff0c;创建一个4GB的交换文件&#xff1a; sudo dd if/dev/zero of/swapfile bs1G count4 2、设置交换文件的权限 为了安全起见&am…

现代 Web 开发工具箱:Element-UI 表单组件全攻略(二)

现代 Web 开发工具箱&#xff1a;Element-UI 表单组件全攻略&#xff08;二&#xff09; 一 . Switch 开关控件1.1 Switch 组件的创建① 注册路由② 创建 Switch 组件 1.2 Switch 组件的属性① 开关的宽度② 开关 打开/关闭 的文字提示③ 开关打开或者关闭时候的值④ 开关打开或…

什么是java的spi?

Java SPI&#xff08;Service Provider Interface&#xff09;是一种提供服务发现机制的设计模式&#xff0c;允许在运行时动态地发现、加载和替换服务的实现。SPI机制的核心思想是&#xff1a;通过接口定义服务&#xff0c;并且使用外部的实现类来提供该服务的具体功能。 目录…

三步设置NAS的内网穿透

现在的NAS很多&#xff0c;NAS中可以提供的dock服务也很多&#xff0c;博主也试了一下&#xff0c;可以把家里的服务提供到公网上&#xff1a; 1、博主有一个“终身免费的花生壳域名”&#xff1a; 2、博主家有一个华为的AX3 PRO路由器&#xff0c;在路由器中设置花生壳域名的…

报错error: RPC failed,curl 16 Error in the HTTP2 framing layer解决方法

error: RPC failed&#xff1b; curl 16 Error in the HTTP2 framing layerfatal: expected flush after ref listing 问题描述&#xff1a; git pull origin main报错error: RPC failed&#xff0c;curl 16 Error in the HTTP2 framing laye 解决方法1&#xff1a; git con…

Blender/3ds Max/C4D哪个软件好?

在3D建模和动画制作领域&#xff0c;Blender、3ds Max和Cinema 4D&#xff08;C4D&#xff09;都是备受赞誉的软件。每个软件都有其独特的优势和特点&#xff0c;选择哪个软件取决于用户的具体需求和个人偏好。今天&#xff0c;成都渲染101云渲染就来分析一些这三款软件的情况&…

828华为云征文|华为Flexus云服务器搭建Cloudreve私人网盘

《华为 Flexus 云服务器搭建 Cloudreve 私人网盘》 一、华为云 Flexus X 实例&#xff1a;开启高效云服务新篇 在云计算的广阔领域中&#xff0c;资源的灵活配置与卓越性能犹如璀璨星辰般闪耀。华为云 Flexus X 实例恰似一颗最为耀眼的新星&#xff0c;将云服务器技术推向了崭…

用Python创建一个键盘输入捕获程序

目录 简介 环境准备 安装依赖 项目结构 编写代码 1. 导入库 2. 定义回调函数 3. 启动键盘监听器 4. 整合代码 运行程序 结论 简介 在这篇博文中,我们将探索如何使用Python编写一个简单的键盘输入捕获程序。这个程序将实时捕获用户的键盘输入并在控制台中显示出来。…

PHP省时省力海报在线制作系统小程序源码

省时省力海报在线制作系统&#xff1a;设计小白也能秒变大师 &#x1f3a8; 开篇&#xff1a;告别繁琐&#xff0c;拥抱高效设计 你还在为设计一张海报而熬夜加班吗&#xff1f;还在为找不到合适的素材而焦头烂额吗&#xff1f;别担心&#xff0c;“省时省力海报在线制作系统”…