C# SUBSTRING
时间: 2025-04-10 20:52:01 浏览: 48
<think>嗯,用户想了解C#中的Substring方法的使用和示例。首先,我需要回忆一下Substring的基本语法。C#中的Substring方法属于String类,有两个重载版本:一个是只接受起始索引,另一个是接受起始索引和长度。
记得起始索引是从0开始的,如果输入的索引超出范围,会抛出ArgumentOutOfRangeException。用户可能在使用的时候会遇到这个问题,所以应该提醒他们注意索引的有效性。例如,如果字符串长度是5,起始索引不能超过4,或者当指定长度时,起始索引加上长度不能超过字符串长度。
接下来,我需要举几个例子。比如,提取字符串的一部分,比如从第3个字符开始提取两个字符。或者,只指定起始索引,提取到末尾。还要注意处理特殊情况,比如空字符串或者索引为负数的情况,这时候会抛出异常,用户可能需要用try-catch来捕获。
然后,用户可能想知道如何结合其他字符串方法使用Substring。比如,先使用IndexOf找到某个字符的位置,再用Substring提取。例如,提取邮箱中的用户名部分,找到@符号的位置,然后截取前面的部分。
另外,用户可能对性能有疑问,比如频繁使用Substring会不会影响效率。这时候可以建议使用Span<T>或者Memory<T>来避免创建新的字符串,特别是在处理大字符串时。
还要注意用户的问题里提到了其他引用,比如引用[1]中的RowFilter语法,虽然和Substring无关,但可能用户之前在处理数据过滤时有相关问题,需要确保回答的准确性,不混淆不同方法的使用场景。
最后,生成相关问题的时候,要考虑用户可能进一步想知道Substring的异常处理、性能优化、与其他方法的结合,或者在不同场景下的应用,比如解析文件路径或处理日志。这些问题需要覆盖基本使用、高级技巧和实际应用,帮助用户全面理解。</think>### C# Substring方法详解
#### 1. 基本语法
C#的`Substring`方法属于`System.String`类,有两个重载版本:
```csharp
// 从指定索引开始截取到字符串结尾
public string Substring(int startIndex);
// 从指定索引开始截取指定长度
public string Substring(int startIndex, int length);
```
#### 2. 使用示例
**示例1:基础用法**
```csharp
string text = "HelloWorld";
Console.WriteLine(text.Substring(5)); // 输出"World"
Console.WriteLine(text.Substring(0, 5)); // 输出"Hello"
```
**示例2:结合IndexOf使用**
```csharp
string email = "[email protected]";
int atIndex = email.IndexOf('@');
string username = email.Substring(0, atIndex); // 输出"user"
```
#### 3. 异常处理
- `ArgumentOutOfRangeException`:当参数不满足以下条件时抛出:
- `startIndex`必须在0到字符串长度之间
- `startIndex + length`不得超过字符串长度
```csharp
try {
string result = text.Substring(15, 3);
}
catch (ArgumentOutOfRangeException ex) {
Console.WriteLine($"错误:{ex.Message}"); // 包含错误上下文信息[^2]
}
```
#### 4. 特殊场景
**截取最后N个字符:**
```csharp
string phone = "138-1234-5678";
string last4Digits = phone.Substring(phone.Length - 4); // 输出"5678"
```
**安全截取(避免异常):**
```csharp
int start = 5;
int length = 10;
string safeSubstring = text.Substring(
Math.Max(0, start),
Math.Min(length, text.Length - start)
);
```
#### 5. 性能优化
对于高频操作,建议使用`Span<T>`:
```csharp
ReadOnlySpan<char> span = text.AsSpan();
ReadOnlySpan<char> slice = span.Slice(5, 5); // 零拷贝操作
```
阅读全文
相关推荐

















