c#String和StringBuilder
目录
一,String
1,string的特点:
2,string常用方法
(1)Length
(2)Substring()
(3)ToUpper()
(4)ToLower()
(5)Trim()
(6)Replace()
(7)Contains()
(8)StartsWith()
(9)EndWith()
(10)IndexOf()
(11)LastIndexOf()
(12)Split()
(13)PadLeft()和PadRight()
(14)IsNullOrEmpty()
(15)IsNullOrWriteSpace()
(16)Concat()
(17)Join()
(18)Format()
(19)Compare()和CompareTo()
(20)Normalize()
(21)Equals()
二,StringBuilder
1,可变
2,StringBuilder常用方法
三,string和stringbuilder性能比较
四,何时使用string和stringBuilder
1,使用string
2,使用StringBuilder
五,总结
在c#中string和stringBuilder都用于处理字符串,但是在内层管理和性能上有显著差异。
一,String
1,string的特点:
(1)不可变:string是不可变的,这意味着你每次对字符串进行修改时,都会创建 一个新的字符串,而不是修改原有的字符串
(2)内存管理:在对字符串进行拼接,替换时,c#会创建一个新的字符串对象, 并将新的内容复制到新对象中,这样,如果多次修改的话,可能会导致频繁的内存 分配和垃圾回收,影响性能
例:
string str1 = "Hello";
str1 = str1 + " World"; // 这里会创建一个新的字符串对象
Console.WriteLine(str1); // 输出: Hello World
2,string常用方法
(1)Length
返回字符串的长度(即字符数)
例:
string str = "Hello, World!";
int length = str.Length; // 返回 13
(2)Substring()
Substring()方法用于从字符串中提取子字符串
例:
string str = "Hello, World!";
string sub = str.Substring(7, 5); // 从索引 7 开始,截取 5 个字符
Console.WriteLine(sub); // 输出: World
(3)ToUpper()
将字符串转换为大写
例:
string str = "hello";
string upperStr = str.ToUpper(); // 输出: HELLO
(4)ToLower()
将字符串转换为小写
string str = "HELLO";
string lowerStr = str.ToLower(); // 输出: hello
(5)Trim()
Trim()方法删除字符串开头和结尾的空白字符
例:
string str = " Hello, World! ";
string trimmedStr = str.Trim(); // 输出: Hello, World!
(6)Replace()
Replace()方法用于替换字符串中的字符或子字符串
例:
string str = "Hello, World!";
string newStr = str.Replace("World", "C#"); // 输出: Hello, C#!
(7)Contains()
Contains()方法用于检查字符串是否包含指定的子字符串
例:
string str = "Hello, World!";
bool contains = str.Contains("World"); // 输出: True
(8)StartsWith()
StartsWith()方法检查字符串是否以指定的前缀开始
例:
string str = "Hello, World!";
bool startsWithHello = str.StartsWith("Hello"); // 输出: True
(9)EndWith()
EndsWith()方法检查字符串是否以指定的后缀结尾
例:
string str = "Hello, World!";
bool endsWithExclamation = str.EndsWith("!"); // 输出: True
(10)IndexOf()
IndexOf()方法返回指定子字符串在字符串中的第一次出现的位置。如果未找到,返 回-1
例:
string str = "Hello, World!";
int index = str.IndexOf("World"); // 输出: 7
(11)LastIndexOf()
LastIndexOf()方法返回指定子字符串在字符串中最后一次出现的位置
例:
string str = "Hello, World! Hello!";
int lastIndex = str.LastIndexOf("Hello"); // 输出: 14
(12)Split()
Split()方法用于根据分隔符将字符串拆分成多个子字符串,并返回一个字符串数组
例:
string str = "apple,banana,orange";
string[] fruits = str.Split(','); // 输出: ["apple", "banana", "orange"]
(13)PadLeft()和PadRight()
PadLeft()方法用于在字符串的左边添加指定数量的空格或字符,直到达到指定的总 长度;PadRight()方法用于在字符串的右边添加字符
例:
string str = "Hello";
string paddedLeft = str.PadLeft(10, '*'); // 输出: "*****Hello"
string paddedRight = str.PadRight(10, '*'); // 输出: "Hello*****"
(14)IsNullOrEmpty()
IsNullOrEmpty()方法用于检查字符串是否为 null 或为空字符串
例:
string str1 = "";
string str2 = null;
bool isEmpty1 = string.IsNullOrEmpty(str1); // 输出: True
bool isEmpty2 = string.IsNullOrEmpty(str2); // 输出: True
(15)IsNullOrWriteSpace()
IsNullOrWhiteSpace()方法用于检查字符串是否为 null、空或仅包含空白字符
例:
string str1 = " ";
string str2 = "";
string str3 = null;
bool isWhiteSpace1 = string.IsNullOrWhiteSpace(str1); // 输出: True
bool isWhiteSpace2 = string.IsNullOrWhiteSpace(str2); // 输出: True
bool isWhiteSpace3 = string.IsNullOrWhiteSpace(str3); // 输出: True
(16)Concat()
Concat()方法用于将多个字符串连接成一个新的字符串
例:
string str1 = "Hello";
string str2 = " ";
string str3 = "World!";
string result = string.Concat(str1, str2, str3); // 输出: "Hello World!"
(17)Join()
Join()方法用于将字符串数组的元素连接成一个字符串,使用指定的分隔符
例:
string[] words = { "apple", "banana", "orange" };
string result = string.Join(", ", words); // 输出: "apple, banana, orange"
(18)Format()
Format()方法用于将格式化字符串中的占位符替换为实际的值
例:
string name = "Alice";
int age = 30;
string result = string.Format("My name is {0} and I am {1} years old.", name, age);
// 输出: "My name is Alice and I am 30 years old."
(19)Compare()和CompareTo()
Compare()方法用于比较两个字符串,返回一个整数表示它们的顺序关系。 CompareTo()方法用于将当前字符串与另一个字符串进行比较
例:
string str1 = "apple";
string str2 = "banana";
int comparison = string.Compare(str1, str2); // 输出: -1,因为 "apple" 小于 "banana"
string str3 = "apple";
int comparisonTo = str3.CompareTo(str2); // 输出: -1,因为 "apple" 小于 "banana"
(20)Normalize()
Normalize()方法用于将字符串的 Unicode 字符表示标准化,通常用于处理带有合成字符的字符串
例:
string str = "é"; // "e" 和 "´" 的组合字符
string normalizedStr = str.Normalize(); // 输出: "é"
(21)Equals()
Equals()方法用于比较两个字符串的内容是否相等
例:
string str1 = "Hello";
string str2 = "hello";
bool isEqual = str1.Equals(str2, StringComparison.OrdinalIgnoreCase); // 输出: True
二,StringBuilder
1,可变
stringbuilder是一个可变的字符串构造器,可以在不创建新的字符串对象的情况下对字符串进行修改,这是通过维护一个内部字符数组来实现的,每次修改都会在该数组上进行,而不会创建新的对象
例:
StringBuilder sb = new StringBuilder("Hello");
sb.Append(" World"); // 不会创建新对象,直接在内部字符数组上修改
Console.WriteLine(sb.ToString()); // 输出: Hello World
2,StringBuilder常用方法
(1)Append():将一个字符串追加到当前字符串的末尾
(2)Insert():在指定位置插入一个字符串
(3)Replace():替换字符串中某些字符
(4)Remove():删除字符串中的一部分字符
(5)ToString():将StringBuilder中内容转换为string
例:
StringBuilder sb = new StringBuilder("Hello");
sb.Append(" World"); // 追加 " World"
sb.Insert(5, ","); // 在位置5插入 ","
sb.Replace("Hello", "Hi"); // 替换 "Hello" 为 "Hi"
sb.Remove(2, 3); // 删除从索引2开始的3个字符
Console.WriteLine(sb.ToString()); // 输出: Hi, World
三,string和stringbuilder性能比较
在使用string拼接多个字符串时,会生成多个临时的string对象,导致频繁的内层分配 和垃圾回收
使用stringbuilder进行字符串拼接时,只有一个内部缓冲区的字符串数组被修改,效率 较高
例:
// 使用 string 拼接
string result1 = "";
for (int i = 0; i < 10000; i++)
{
result1 += "a"; // 每次拼接都会生成一个新的 string 对象
}
// 使用 StringBuilder 拼接
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++)
{
sb.Append("a"); // 使用内部字符数组,效率更高
}
string result2 = sb.ToString();
四,何时使用string和stringBuilder
1,使用string
(1)字符串不会频繁变化,例如常量字符串、路径、显示信息等
(2)对性能要求不高的场景,且字符串拼接次数较少
2,使用StringBuilder
(1)在需要频繁拼接、修改字符串的场景,例如循环内拼接字符串、构造动态内 容、日志记录等
(2)当涉及大量字符串操作时,StringBuilder可以显著提高性能,减少内层分配
五,总结
总的来说,如果字符串需要频繁修改,建议使用StringBuilder,如果字符串不需要频繁修改,则使用String
相关文章:
c#String和StringBuilder
目录 一,String 1,string的特点: 2,string常用方法 (1)Length (2)Substring() (3)ToUpper() (4)ToLower() (5&…...
【Linux】HTTP协议
之前,我们已经做过了自定义协议,事实上,已经有很多现成已经做好又非常好用的协议,它们都是相同的,比如HTTP协议。所谓HTTP协议,就是超文本传输协议,定义了客户端和服务器之间是如何通信的&#…...
计算机网络 (14)数字传输系统
一、定义与原理 数字传输系统,顾名思义,是一种将连续变化的模拟信号转换为离散的数字信号,并通过适当的传输媒介进行传递的系统。在数字传输系统中,信息被编码成一系列的二进制数字,即0和1,这些数字序列能够…...
《向量数据库指南》——Milvus Cloud 2.5:Sparse-BM25引领全文检索新时代
Milvus Cloud BM25:重塑全文检索的未来 在最新的Milvus Cloud 2.5版本中,我们自豪地引入了“全新”的全文检索能力,这一创新不仅巩固了Milvus Cloud在向量数据库领域的领先地位,更为用户提供了前所未有的灵活性和效率。作为大禹智库的向量数据库高级研究员,以及《向量数据…...
Unity3D 网络框架设计详解
前言 Unity3D是一款强大的跨平台游戏开发引擎,网络框架的设计对于实现客户端与服务器之间的稳定通信至关重要。本文将详细介绍Unity3D网络框架的设计原理、技术要点以及代码实现。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一…...
网络渗透测试实验四:CTF实践
1.实验目的和要求 实验目的:通过对目标靶机的渗透过程,了解CTF竞赛模式,理解CTF涵盖的知识范围,如MISC、PPC、WEB等,通过实践,加强团队协作能力,掌握初步CTF实战能力及信息收集能力。熟悉网络扫描、探测HTTP web服务、目录枚举、提权、图像信息提取、密码破解等相关工具…...
Wend看源码-Java-Collections 工具集学习
摘要 java.util.Collections它提供了一系列静态方法,用于对集合(如List、Set、Map等)进行操作。这些操作包括排序、查找、替换、同步等多种功能,帮助开发者更方便地处理集合数据。以下是Collections 提供的一些主要方法的总结。…...
[JAVA]MyLogger
import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.*;/*** 可以自已定义日志打印格式,这样看起来比较方便些**/ class MyFormatter extends Formatter {Overridepublic String format(LogRecord ar…...
玩转OCR | 腾讯云智能结构化OCR初次体验
目录 一、什么是OCR(需要了解) 二、产品概述与核心优势 产品概述 智能结构化能做什么 举例说明(选看) 1、物流单据识别 2、常见证件识别 3、票据单据识别 4、行业材料识别 三、产品特性 高精度 泛化性 易用性 四、…...
记一次 dockerfile 的循环依赖错误
文章目录 1. 写在最前面1.1 具体循环依赖的例子 2. 报错的位置2.1 代码快速分析2.2 代码总结2.3 关于 parser 的记录 3. 碎碎念 1. 写在最前面 笔者在使用 dockerfile 多阶段构建的功能时,写出了一个「circular dependency detected on stage: xx」的错误。 解决方…...
Trimble天宝X9三维扫描仪为建筑外墙检测提供了全新的解决方案【沪敖3D】
随着城市化进程的快速推进,城市高层建筑不断增多,对建筑质量的要求也在不断提高。建筑外墙检测,如平整度和垂直度检测,是衡量建筑质量的重要指标之一。传统人工检测方法不仅操作繁琐、效率低下,还难以全面反映墙体的真…...
【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
**前言:**本节内容介绍使用C/C访问数据库, 包括对数据库的增删查改操作。 主要是学习一些接口的调用, 废话不多说, 开始我们的学习吧! ps:本节内容比较容易, 友友们放心观看哦! 目录 准备mysql…...
LabVIEW化工实验室设备故障实时监测
化工实验室中,各类设备的运行状态直接影响实验的精度与安全性。特别是重要分析仪器的突发故障,可能导致实验中断或数据失效。为了实现设备运行状态的实时监控与故障快速响应,本文提出了一套基于LabVIEW的解决方案,通过多参数采集、…...
单例模式懒汉式、饿汉式(线程安全)
饿汉式单线程安全吗 饿汉式单例(Eager Singleton)是线程安全的。这种实现方式在类加载时就创建了单例实例,因此在多线程环境中,不存在多个线程同时创建实例的问题。 饿汉式单例的实现 以下是一个饿汉式单例的示例: …...
Cursor登录按钮点击没反应
问题 系统:Windows11 Cursor:Cursor 0.44.9 当安装Cursor打开进行登录时,点击Sign in没反应 解决方案 1.打开window11的设置 2.点击应用中的默认应用 3.在设置应用程序的默认值中搜索Google(没有Google浏览器的尝试下载一个&a…...
论文实现:Reactive Nonholonomic Trajectory Generation via Parametric Optimal Control
1. 多项式螺旋 曲率: κ ( s ) a 0 a 1 s a 2 s 2 a 3 s 3 a 4 s 4 a 5 s 5 \begin{align} \kappa(s) a_0 a_1s a_2s^2 a_3s^3 a_4s^4 a_5s^5 \end{align} κ(s)a0a1sa2s2a3s3a4s4a5s5 机器人朝向: θ ( s ) a 0 s a 1 …...
基于单片机中药存放环境监测系统的实现
基于单片机中药存放环境监测系统的实现 项目开发背景 随着现代中药的广泛应用,中药材的存储环境对其质量有着至关重要的影响。温湿度、烟雾、火灾等环境因素,若不加以控制,将会导致中药材失效或变质。因此,设计一个基于单片机的…...
九垠赢+商业管理系统 Common.ashx 文件上传致RCE漏洞复现
0x01 产品简介 九垠赢+商业管理系统是基于互联网技术的进销存管理软件,适用于新零售背景下各种业态的线上线下一体化的商超经营管理。赢+ERP以商业管理系统为底座,融合了多种软、硬件解决方案,实现了从企业、供应商、三方平台到顾客等日常管理的全线数字化、智能化和移动化…...
速盾:服务器CDN加速解析的好处有哪些呢?
随着互联网应用的普及,越来越多的企业开始关注如何提升网站的访问速度和用户体验。为了实现这一目标,许多企业选择使用CDN(内容分发网络)来加速网站的内容分发。CDN通过在全球范围内分布多个节点,将内容缓存到离用户最…...
C++ 设计模式:备忘录模式(Memento Pattern)
链接:C 设计模式 链接:C 设计模式 - 状态模式 备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下捕获和恢复对象的内部状态。这个模式在需要保存和恢复对象状态的场景中非常有用ÿ…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
