在C#编程中,字符串截取是非常基础且高频的操作,无论是处理用户输入、解析接口返回数据还是格式化文本内容,都需要用到相关方法。不同场景下需要的截取逻辑不同,选择合适的方法能大幅提升开发效率。

C#字符串截取的核心方法
1. Substring方法
Substring是C#中最基础的字符串截取方法,它可以从指定索引位置开始,截取指定长度的字符串,有两个常用重载形式。
第一个重载是Substring(int startIndex),从startIndex位置开始截取到字符串末尾:
using System;
class Program
{
static void Main()
{
string originalStr = "HelloCSharp";
// 从索引2开始截取到末尾
string result1 = originalStr.Substring(2);
Console.WriteLine(result1); // 输出 lloCSharp
}
}
第二个重载是Substring(int startIndex, int length),从startIndex位置开始截取长度为length的字符串:
using System;
class Program
{
static void Main()
{
string originalStr = "HelloCSharp";
// 从索引2开始截取3个字符
string result2 = originalStr.Substring(2, 3);
Console.WriteLine(result2); // 输出 llo
}
}
使用Substring时需要注意,如果startIndex超过字符串长度,或者startIndex加length超过字符串长度,会抛出ArgumentOutOfRangeException异常,实际使用时可以先做长度校验。
2. 结合IndexOf定位后截取
很多时候我们需要截取某个特定字符或子串之后的内容,这时候可以先用IndexOf方法找到目标位置,再配合Substring完成截取。
IndexOf方法会返回指定字符或子串在字符串中首次出现的索引,如果不存在则返回-1。
using System;
class Program
{
static void Main()
{
string url = "https://ipipp.com/article/123";
// 找到最后一个/的位置
int lastSlashIndex = url.LastIndexOf("/");
if (lastSlashIndex != -1)
{
// 截取/之后的内容
string articleId = url.Substring(lastSlashIndex + 1);
Console.WriteLine(articleId); // 输出 123
}
string email = "user@ipipp.com";
int atIndex = email.IndexOf("@");
if (atIndex != -1)
{
// 截取@之前的内容作为用户名
string userName = email.Substring(0, atIndex);
Console.WriteLine(userName); // 输出 user
}
}
}
3. split方法按分隔符截取
如果需要按照某个固定分隔符把字符串拆分成多个部分,split方法会更便捷,它会返回一个字符串数组,包含拆分后的所有子串。
using System;
class Program
{
static void Main()
{
string data = "apple,banana,orange,grape";
// 按逗号拆分字符串
string[] fruits = data.Split(',');
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
// 输出:
// apple
// banana
// orange
// grape
// 也可以按多个分隔符拆分
string info = "张三|18;男";
char[] separators = { '|', ';' };
string[] details = info.Split(separators);
Console.WriteLine($"姓名:{details[0]},年龄:{details[1]},性别:{details[2]}");
// 输出 姓名:张三,年龄:18,性别:男
}
}
4. 使用Remove方法间接截取
Remove方法的作用是移除字符串中从指定位置开始的字符,也可以间接实现截取效果,它有两个重载:
Remove(int startIndex):移除从startIndex开始到末尾的所有字符Remove(int startIndex, int count):移除从startIndex开始的count个字符
如果要截取字符串开头的部分内容,用Remove移除后面的内容即可:
using System;
class Program
{
static void Main()
{
string str = "CSharp入门教程";
// 只保留前6个字符,移除后面的内容
string prefix = str.Remove(6);
Console.WriteLine(prefix); // 输出 CSharp
}
}
不同截取场景的选择建议
| 场景 | 推荐方法 |
|---|---|
| 截取固定位置和长度的子串 | Substring |
| 截取某个字符前后的内容 | IndexOf + Substring |
| 按固定分隔符拆分字符串 | split |
| 保留字符串开头部分内容 | Remove |
新手在使用这些方法时,要注意先处理边界情况,比如判断目标索引是否存在、字符串是否为空,避免出现运行时异常。多结合实际的开发场景练习,就能快速熟练掌握C#字符串截取的各类技巧。