C#系统学习第八章——字符串

前言

本文将从 C# 字符串的基础语法出发,深入剖析声明、初始化、长度获取、字符定位等核心操作,再延伸至字符串拼接、比较、格式化等实用技巧,最后揭秘StringBuilder类在高效文本处理中的关键作用。无论你是编程新手还是希望巩固基础的开发者,都能在字里行间找到提升字符串操作能力的关键知识。


8.1 字符串的声明与初始化

字符串就是用字符拼接而成的文本值。

在C#中,可以通过string类声明字符串。

8.1.1 声明字符串

在C#语言中,字符串必须包含在一对双引号之内:

cs 复制代码
"123","你好"

以上都是字符串常量。

注意:在C#中,由双引号引起来的都是字符串,不能作为其他数据类型使用。

声明字符串语法:

cs 复制代码
string str=[null]

string:指定该变量为字符串类型

str:任意有效的标识符,表示字符串变量的名称

null:如果省略null,表示str变量是未初始化的状态;否则,表示声明的字符串的值就等于null。

8.1.2 字符串的初始化

要使用变量,必须先对其进行初始化(即赋值)。

1.引用字符串常量:

cs 复制代码
string str="1111";
string a,b;
a="111";
b="asda";

2.利用字符数组初始化字符串:

cs 复制代码
char[] array={'a','b','c'};
string str=new string(array);

注意:

(1)string a=null 与string a=""不同

前者是空对象,没有指向任何引用地址,调用会出现异常。

后者是一个字符串,分配了内存空间。

(2)有一种特殊情况,即使不初始化,仍然不报错

字符串作为成员变量的情况:把字符串的定义放到类中,而不是方法中这时定义的字符串变量就叫成员变量,他会保持默认值Null,


8.2 获取字符串信息

8.2.1 获取字符串的长度

string类的Length属性,语法格式:

cs 复制代码
public int Length{ get;}

8.2.2 获取指定位置的字符

获取指定位置的字符可以使用string类的Chars属性,语法格式:

cs 复制代码
public char this[int index]
{get;}

index:当前字符串中的位置。

例如:

cs 复制代码
string a="a1dasdasd";
char b=str[1];

8.2.3 获取子字符串索引位置

1.Indexof方法

返回的是搜索的字符或字符串首次出现的索引位置。语法为:

cs 复制代码
public int IndexOf(char value)
public int IndexOf(string value)
public int IndexOf(stringvalue,int startIndex)
public int IndexOf(char value,int startIndex)
public int IndexOf(stringvalue,int startIndex,int count)
public int IndexOf(char value,int startIndex,int count)

value:要搜索的字符或者字符串。

startIndex:要搜起始位置。

count:要检查的字符位置数。

返回值:如果找到字符或者字符串,则结果为value的从0开始的索引位置;如果未找到字符或者字符串,则结果为-1。

例如:

cs 复制代码
string str="阿萨大大阿瑟dadasdada";
int size=str.Indexof('e');

2.LatIndexof方法

返回的是搜索的字符或字符串最后一次出现的索引位置,他有多种重载方式:

cs 复制代码
public int LastIndexOf(char value)
public int LastIndexOf(string value)
public int LastIndexOf(char value,int startIndex)
public int LastIndexOf(string value,,int startIndex)
public int LastIndexOf(char value,int startIndex,int count)
public int LastIndexOf(string value,,int startIndex,int count)

value:要搜索的字符或者字符串。

startIndex:搜索起始位置。

count:要检查的字符位置数。

返回值:如果找到字符或者字符串,则结果为value的从0开始的索引位置;如果未找到字符或字符串,则结果为-1。

8.2.4 判断字符串首位内容

1.StartsWith方法

判断字符串是否以指定的内容开始。

cs 复制代码
public bool StartsWith(string value)
public bool StartsWith(string value,bool ignoreCase,CultureInfo culture)

value:要判断的字符串。

ignoreCase:如果要在判断过程中忽略大小写,则设为true;否则设为false。

culture:CultureInfo对象,用来确定如何对字符串与value进行比较的区域性信息;如果culture为null,则使用当前区域性。

返回值:若value与字符串的开头匹配,则为true,反之为false。

2.EndsWith方法

用来判断1字符串是否已指定的内容结束。

cs 复制代码
public bool EndsWith(string value)
public bool EndsWith(string value,bool ignoreCase,CultureInfo culture)

value:要判断的字符串。

ignoreCase:如果要在判断过程中忽略大小写,则设为true;否则设为false。

culture:CultureInfo对象,用来确定如何对字符串与value进行比较的区域性信息;如果culture为null,则使用当前区域性。

返回值:若value与字符串的结尾匹配,则为true,反之为false。


8.3 字符串操作

8.3.1 字符串的拼接

使用 + 运算符可完成对多个字符串的拼接,+ 运算符可以连接多个字符串并产生string对象。

cs 复制代码
string s1="asdf";
string s2="asdfff";
string s=s1+s2;

8.3.2 比较字符串

使用 == 符号实现

cs 复制代码
string a1="1asdad";
string a2="asda";
Console.Write(a1==a2);

1.Compare方法

语法:

cs 复制代码
int compare(string a,string b);
int compare(string a,string b,bool ignoreCase);

a和b:要比较的两个字符串。

ignoreCase:是一个布尔类型的参数,true为忽略大小写,false为不忽略。

注意:比较字符串并非比较字符串长度的大小,而是比较字符串在英文字典中的位置,即按照字典排序的规矩,判断两个字符串的大小。在英文字典中,在前面的单词小于在后面的单词。

2.CompareTo方法

功能同上,不同的是该方法将实例对象本身与指定字符串作比较

语法:

cs 复制代码
public int CompareTo(string str);

例如:

cs 复制代码
stra.CompareTo(strb);

3.Equals方法

Equals方法主要用于比较两个字符串是否相同,如果相同则返回值是True,否则为false。

cs 复制代码
public bool Equals(string value);
public static bool Equals(string a,string b);

value:与实例比较的字符串。

a和b:要进行比较的两个字符串。

8.3.3 字符串的大小写转换

ToUpper方法:将字符串转换为大写

ToLower方法:将字符串转换为小写

语法:

cs 复制代码
public int ToUpper()
public int ToLower()

注意:

如果字符串没有需要被转换的字符,那么返回原字符串。

8.3.4 格式化字符串

Format方法:用于将字符串数据格式化成指定的格式:

cs 复制代码
public static string Format(string format,Object arg0)
public static string Format(string format,params Object[] args)
{index[,length][:formatString]}

index:要设置格式的对象的参数列表中的位置(从0开始)。

length:参数的字符串表示形式中包含的最小字符数;如果该值是正的,则参数右对齐反之,参数左对齐。

formatString:要设置格式的对象支持的标准或自定义格式字符串。

arg0:要设置的格式对象

args:一个对象数组,其中包含0个或多个要设置格式的对象。

返回值:格式化后的字符串。

1.数值类型的格式化

2.日期时间类型的格式化

8.3.5 截取字符串

截取字符串中指定位置和指定长度的子字符串。

cs 复制代码
public string Substring(intstartIndex)
public string Substring(intstartIndex,int length)

startIndex:子字符串的起始位置索引。

length:子字符串的字符数。

返回值:截取的子字符串。

8.3.6 分割字符串

根据指定的字符数组或者祖父数组对字符串进行分割。

cs 复制代码
public string[] Split(params char[] separator)
public string[] Split(char [] separator,int count)
public string[] Split(string[] separator,StringSplitOptions options)
public string[] Split(char[] separator,int count,StringSplitOptions options)
public string[] Split(string[] separator,int count,StringSplitOptions options)

separator:分割字符串的字符数组或字符串数组。

count:要返回的子字符串的最大数量。

options:如果要省略返回的数组中的空数组元素,则设为RemoveEmptyEntries;如果要包含返回的数组中的空数组元素,则设为None。

返回值:一个数组,包含分割的子字符串。

8.3.7 插入以及填充字符串

向字符串的任意位置插入新的子字符串。

cs 复制代码
public String Insert(int startIndex ,string value)

startIndex:用于指定索要插入的位置,索引从0开始。

value:指定索要插入的字符串

返回值:插入字符串之后得到的新字符串。

补充:

字符串对其方法:

(1)PadLeft:在字符串的左侧进行字符填充。

(2)PadRight:在字符串的右侧进行字符填充。

语法格式:

cs 复制代码
public string PadLeft(int totalWidth,char paddingChar)
public string PadRight(int totalWidth,char paddingChar)

totalWidth:指定填充之后的字符串长度。

paddingChar:指定索要填充的字符,如果省略,则填充空格。

8.3.8 删除字符串

Remove方法:用来从一个字符串的指定位置开始,删除指定数量的字符。

语法:

cs 复制代码
public string Remove(int startIndex)
public string Remove(int startIndex,int count)

startIndex:用于指定开始删除的位置,索引从0开始。

count:指定删除的字符数量。

返回值:删除指定数量的字符后得到的新字符串。

8.3.9 去除空白内容

Trim方法,用来移除字符串中的所偶开头空白字符和结尾空白字符。

cs 复制代码
public string Trim()
public string Trim(params char[] trimChars)//拓展:删除指定字符

8.3.10 复制字符串

1.Copy方法

创建一个与指定的字符串具有相同值的字符串。

语法:

cs 复制代码
public static string Copy(string str)

str:要复制的字符串

返回值:与str相同的新字符串

2.CopyTo方法

将字符串的某一部分复制到拎一个字符数组中。

语法:

sourceIndex:要复制的字符的起始位置。

destination:目标字符数组。

destinationIndex:制定目标数组中的开始存放位置。

count:指定要复制的字符个数。

8.3.11 替换字符串

Replace方法:将字符串中的某个字符或字符串替换成其他的字符或字符串。

cs 复制代码
public string Replace(char OChar,char NChar)
public string Replace(string OValue,string Ovalue)

OChar:待替换的字符。

NChar:替换后的新字符。

Ovalue:待替换的字符串。

Nvalue:替换后的新字符串。

返回值:替换字符或字符串之后得到的新字符串。

说明:如果要替换的字符或者字符串,重复多次出现,方法会替换所有重复的字符。

8.4 可变字符串类

8.4.1 StringBuilder类的定义

StringBuilder类位于System.Text命名空间中,需要使用前引入该命名空间。

cs 复制代码
public StringBuilder()
public StringBuilder(int capacity)
public StringBuilder(string value)
public StringBuilder(int capacity,int maxCapacity)
public StringBuilder(string value,int capacity)
public StringBuilder(string value,int startIndex,int length,int capacity)

说明:之所以说stringbuilder是可变字符序列,是因为再创建之后,可以通过追加,移除和替换或插入字符而对它进行修改。

8.4.2 StringBuilder类的使用

8.4.3 StringBuilder类与string类的区别

string类本身不可改变,他只能赋值一次,每一次内容发生改变都会生成一个新的对象。

StringBuilder类则不同,每次操作都是对自身对象进行操作,而不是产生新的对象。这样,在做大量的修改操作时,不会因为生成大量匿名对象而影响系统性能。


结语

当你掌握了字符串的索引定位、格式转换、分割拼接等操作后,会发现文本处理不再是繁琐的重复劳动,而是可以通过算法与逻辑优化的编程艺术。无论是开发一个简单的文本编辑器,还是处理复杂的日志分析系统,扎实的字符串操作功底都将成为你编码路上的得力助手。愿本文的内容能助你在 C# 的字符串世界中自由驰骋,将文本数据转化为编程创意的无限可能。

相关推荐
Chef_Chen1 分钟前
从0开始学习计算机视觉--Day07--神经网络
神经网络·学习·计算机视觉
2401_858286118 分钟前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序
guygg881 小时前
基于matlab的FIR滤波器
开发语言·算法·matlab
双叶8361 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++
源代码•宸1 小时前
C++高频知识点(二)
开发语言·c++·经验分享
你怎么知道我是队长2 小时前
python-input内置函数
开发语言·python
X_StarX2 小时前
【Unity笔记02】订阅事件-自动开门
笔记·学习·unity·游戏引擎·游戏开发·大学生
MingYue_SSS2 小时前
开关电源抄板学习
经验分享·笔记·嵌入式硬件·学习
weixin_437398212 小时前
转Go学习笔记(2)进阶
服务器·笔记·后端·学习·架构·golang
jyan_敬言3 小时前
【C++】string类(二)相关接口介绍及其使用
android·开发语言·c++·青少年编程·visual studio