CodeGym /课程 /C# SELF /string类的进阶方法

string类的进阶方法

C# SELF
第 9 级 , 课程 4
可用

1. 在字符串中查找子串

上节课你已经学会了怎么从字符串里拿出子串。这节我们来学怎么在一个字符串里找到另一个字符串。有5个超好用的方法:

Contains方法:字符串里有没有这个子串?

如果你传进去的字符串在当前字符串里有,返回true

string phrase = "风的变化";
bool hasWord = phrase.Contains("变化"); // true
Contains检查子串是否存在

查找是区分大小写的!"风".Contains("风")false

IndexOf方法:找到子串的位置

跟数组里的IndexOf差不多:从头到尾找子串,返回第一次出现的位置。

string text = "西瓜西瓜";
int index = text.IndexOf("瓜"); // 2
IndexOf查找子串位置
  • 如果没找到,返回-1
  • 还可以指定起始位置:IndexOf("瓜", 4)。和数组用法一样。

LastIndexOf方法:最后一次出现

也跟数组里的LastIndexOf差不多:从后往前找子串,返回最后一次出现的位置。

string repeated = "任务 任务";
int last = repeated.LastIndexOf("任务"); // 7
LastIndexOf查找最后一次出现的子串

字符串是否以指定子串开头/结尾

很多时候你想知道字符串是不是以某个子串开头(或结尾)。有两个方法:

  • StartsWith — 检查字符串是不是以某个子串开头;
  • EndsWith — 检查字符串是不是以某个子串结尾。
string fileName = "photo.jpg";
bool isJpg = fileName.EndsWith(".jpg"); // true

string email = "support@company.com";
bool isSupport = email.StartsWith("support"); // true
检查字符串的开头和结尾

如果你想忽略大小写,可以传个额外参数指定比较模式(看文档里的StringComparison.OrdinalIgnoreCase)。

2. Replace方法:替换字符和子串

Replace方法会把所有A字符串都换成B字符串。最早是用来修错别字、做敏感词过滤、模板变量替换啥的!(开个玩笑。)

string address = "伦敦, 贝克街";
string updated = address.Replace("伦敦", "巴黎");
Console.WriteLine(updated); // "巴黎, 贝克街"
Replace替换子串
  • 你甚至可以只换单个字符:str.Replace('a', 'z')
  • 注意:所有匹配都会被换掉,不只是第一个。

3. Split方法:把字符串切成小块

Split方法干的事就是:拿你的字符串,用分隔符(字符或字符串)把它切开。它会返回一个字符串数组,就是切出来的每一块。

string[] parts = originalString.Split(separator);
Split方法的语法
  • separator — 你用来分割的字符或字符数组。

最简单的例子

空格分割字符串:

string input = "苹果 梨 橙子 香蕉";
string[] fruits = input.Split(' '); 	// 得到数组 ["苹果","梨","橙子","香蕉"]
Console.WriteLine(fruits[0]); 			// "苹果"
Console.WriteLine(fruits[1]); 			// "梨"

这样我们就得到了长度为4的字符串数组,每个单词就是一个元素。

多个分隔符

有时候字符串里不止一种分隔符。比如用户可能用空格、逗号或者分号分隔。

这种情况可以用字符数组当分隔符:

string input = "苹果, 梨; 橙子 香蕉";
char[] separators = { ' ', ',', ';' };
string[] fruits = input.Split(separators, StringSplitOptions.RemoveEmptyEntries);

小技巧:可选参数StringSplitOptions.RemoveEmptyEntries会把空的片段去掉。比如用户连续输两个分隔符——像"苹果,, 梨"这种。

按子串分割

分隔符也可以是字符串,不只是单个字符。比如你有个CSV文件,分隔符是";"或者|

// 单字符分隔符
string data = "Smith;Jones;Doe";
string[] names = data.Split(';'); // 按';'分割

// 或者分隔符是整个字符串:
string log = "2024-01-01::错误::任务执行失败";
string[] separators = { "::" };
string[] parts = log.Split(separators);

4. Join方法:把字符串数组拼回去

Join方法干的事正好相反:它接收一个字符串数组,把它们拼成一个字符串,中间插你指定的分隔符。

string result = string.Join(separator, arrayOfStrings);
Join方法的语法
  • separator — 插在每个元素之间的字符串。
  • arrayOfStrings — 字符串数组或集合(string[]List<string>等)。

最简单的例子

把字符串数组用逗号拼成一个字符串:

string[] items = { "苹果", "梨", "橙子", "香蕉" };
string joined = string.Join(", ", items);
Console.WriteLine(joined); // "苹果, 梨, 橙子, 香蕉"
Join拼接字符串数组

用空分隔符拼接——直接合成一串

有时候你就想把字符串直接拼起来,中间啥都不加:

string[] parts = { "我", "爱", "C#" };
string message = string.Join("", parts);
Console.WriteLine(message); // "我爱C#"
不加分隔符拼接字符串

5. 常见错误

很多新手开发者经常忘了在用Split分割字符串后把多余的空格去掉。比如用户手抖写了"苹果, 梨 ,香蕉",Split后会有" 梨 "这种元素。如果直接转数字或比较,肯定出bug。记得Split后对每个元素用Trim()——这是个好习惯。

还有一个问题——多出来的空字符串。用户连续输两个分隔符,或者字符串开头结尾就是分隔符,Split会返回空元素。加上StringSplitOptions.RemoveEmptyEntries,这样就不会踩坑了。

如果你传给Join的数组里有空元素或者null,Join会直接忽略它们。但如果你不想这样(比如做报表时要显示哪些值被漏掉了),那就得自己先处理数组。

还有一点:Split永远不会改原字符串,只会返回新数组。Join也不会改原数组,只会返回新字符串。记住:C#里的字符串和数组都是不可变的(immutable)。

2
任务
C# SELF, 第 9 级, 课程 4
已锁定
使用 `Replace` 方法替换文本中的子字符串
使用 `Replace` 方法替换文本中的子字符串
2
任务
C# SELF, 第 9 级, 课程 4
已锁定
将字符串拆分成部分并重新合并
将字符串拆分成部分并重新合并
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION