C# String 常用操作方法详解

总目录


前言

在C#编程中,字符串(String)是最常用的数据类型之一。无论是处理用户输入、文件内容还是网络数据,字符串操作都是不可避免的。今天,我们就来深入探讨一下 C# 中字符串的常用操作方法,并通过一些实际案例来帮助你更好地理解和使用它们。


一、字符串的不可变性

在 C# 中,字符串是不可变的(immutable)。这意味着一旦创建了一个字符串对象,它的内容就无法被修改。每次对字符串进行修改操作时,实际上都会创建一个新的字符串对象。这种设计使得字符串在多线程环境中非常安全,但也需要注意性能问题。

示例:字符串的不可变性

string str = "Hello";
str += " World"; // 实际上创建了一个新的字符串对象
Console.WriteLine(str); // 输出:Hello World

在上面的例子中,str += " World" 并不是在原字符串上追加内容,而是创建了一个新的字符串对象,并将原字符串和 " World" 拼接后的结果赋值给 str

二、字符串的基本操作

1. 创建字符串

直接赋值:

string greeting = "Hello, World!";

也可以使用String类的构造函数:

string greeting = new string(new char[] { 'H', 'e', 'l', 'l', 'o' });
Console.WriteLine(greeting);	//输出:Hello

string str = new string('a', 5); // 创建一个包含 5 个 'a' 的字符串
Console.WriteLine(str);			//输出:aaaaa

2. 获取字符串长度

使用Length属性可以获取字符串的长度:

string text = "Hello";
Console.WriteLine(text.Length); // 输出: 5

3. 访问字符

[] 运算符可用于只读访问字符串的个别字符。 有效索引于 0 开始,且必须小于字符串的长度:

string str = "test";
char x = str[2];  // x = 's';

三、字符串比较

1. ==操作符 相等比较

使用==操作符可以进行字符串相等比较:

string str1 = "hello";
string str2 = "hello";
bool isEqual = str1 == str2; // 或者 str1.Equals(str2)
Console.WriteLine(isEqual); // 输出: True

2. 区分大小写比较

使用StringComparer类可以进行区分大小写的比较:

  • StringComparer.Ordinal:基于字符的Unicode值进行区分大小写的比较
  • StringComparer.OrdinalIgnoreCase:基于字符的Unicode值进行不区分大小写的比较
string str1 = "Hello";
string str2 = "HELLO";
bool isEqualIgnoreCase = StringComparer.OrdinalIgnoreCase.Equals(str1, str2);
Console.WriteLine(isEqualIgnoreCase); // 输出: True

bool isEqualCaseSensitive = StringComparer.Ordinal.Equals(str1, str2);
Console.WriteLine(isEqualCaseSensitive); // 输出: False

具体来说,StringComparer.OrdinalIgnoreCase.Equals(str1, str2) 会执行以下步骤:

  • 将 str1 和 str2 都转换为相同的大小写形式(通常是全部转换为小写或大写)。
  • 比较这两个转换后的字符串是否相等。

3. string.Equals 相等比较

internal class Program
{
    static void Main(string[] args)
    {
        string str1 = "Hello";
        string str2 = "hello";

        bool isEqual = string.Equals(str1, str2, StringComparison.OrdinalIgnoreCase); 
        Console.WriteLine(isEqual); // 输出:True
    }
}

四、字符串查找与判断

1. 查找子字符串索引

使用IndexOf方法可以查找子字符串的位置:

string text = "Hello, World!";
int index = text.IndexOf("World");
Console.WriteLine(index); // 输出: 7

2. 是否包含字符串

使用string.Contains方法可以查找一个字符串是否包含另一个字符串:

string str = "Hello World";
bool contains = str.Contains("World");
Console.WriteLine(contains); // 输出:True

优先使用Contains而非IndexOf > -1提升可读性

3. 判断字符串开始和结尾

  • StartsWith :确定此字符串实例的开头是否与指定的字符串匹配。
  • EndsWith:确定此字符串实例的结尾是否与指定的字符串匹配。
internal class Program
{
    static void Main(string[] args)
    {
        string data = "abcdef";
        
        bool result = data.StartsWith("b");
        Console.WriteLine(result);  //  输出:False

        result = data.StartsWith("a");
        Console.WriteLine(result);  //  输出:True

        result = data.StartsWith("A");
        Console.WriteLine(result);  //  输出:False

        result =data.StartsWith("a",StringComparison.Ordinal);
        Console.WriteLine(result);  //  输出:True

        result = data.StartsWith("A", StringComparison.Ordinal);
        Console.WriteLine(result);  //  输出:False

        result = data.StartsWith("A", StringComparison.OrdinalIgnoreCase);
        Console.WriteLine(result);  //  输出:True
    }
}
  • StartsWith 和 EndsWith 比较的时候,默认使用 StringComparison.Ordinal(区分大小写比较)的方式进行比较

4. 判断是否为空

  • string.IsNullOrEmpty
  • string.IsNullOrWhiteSpace

五、字符串操作

1. 字符串拼接

1) 使用 + 操作符

字符串可以通过 + 操作符进行拼接:

string firstName = "John";
string lastName = "Doe";
string fullName = firstName + " " + lastName;
Console.WriteLine(fullName); // 输出: John Doe

2) 使用 StringBuilder

对于频繁的字符串拼接操作,使用StringBuilder类会更高效:

using System.Text;

StringBuilder sb = new StringBuilder();
sb.Append("John");
sb.Append(" ");
sb.Append("Doe");
string fullName = sb.ToString();
Console.WriteLine(fullName); // 输出: John Doe

循环体内拼接务必使用StringBuilder

3) 使用 String.Concat 方法

internal class Program
{
    static void Main(string[] args)
    {
        string str1 = "Hello";
        string str2 = "World";
        string result1 = string.Concat(str1, " ", str2);
        Console.WriteLine(result1);                 // 输出:Hello World

        string result2 = string.Concat(str1, "*", str2); 
        Console.WriteLine(result2);                 // 输出:Hello*World

        string result3 = string.Concat(str1,str2);
        Console.WriteLine(result3);                 // 输出:HelloWorld

        string[] strArr = new string[] { "hello","_","world" };
        Console.WriteLine(string.Concat(strArr));   // 输出:hello_world
    }
}

4) 连接字符串数组

使用Join方法可以将字符串数组连接成一个字符串:

string[] fruits = { "apple", "banana", "cherry" };
string joinedText = string.Join(", ", fruits);
Console.WriteLine(joinedText); // 输出: apple, banana, cherry

string joinedText2=string.Join(Environment.NewLine, fruits);
Console.WriteLine(joinedText2);
// 输出:
// apple
// banana
// cherry

2. 分割字符串

使用Split方法可以根据指定的分隔符分割字符串:

string text = "apple,banana,cherry";
string[] fruits = text.Split(',');
foreach (var fruit in fruits)
{
    Console.WriteLine(fruit);
}
// 输出:
// apple
// banana
// cherry

3. 替换子字符串

1)Replace

使用Replace方法可以替换子字符串:

string originalText = "Hello, World!";
string replacedText = originalText.Replace("World", "Universe");
Console.WriteLine(replacedText); // 输出: Hello, Universe!

2)ReplaceLineEndings

将字符串中所有不同操作系统的换行符统一替换为当前环境的标准换行符(或指定字符),解决跨平台换行符混乱问题。

支持的换行符类型

  • Windows 换行符:\r\n
  • Linux/macOS 换行符:\n
  • 旧版 Mac 换行符:\r
// 混合换行符的原始字符串
string mixedText = "第一行\r\n第二行\n第三行\r第四行";

// 统一为当前系统换行符(Windows下变为\r\n,Linux/macOS下变为\n)
string unifiedText = mixedText.ReplaceLineEndings();
Console.WriteLine(unifiedText);

// 强制指定换行符(无论当前系统)
string forceUnixStyle = mixedText.ReplaceLineEndings("\n");
Console.WriteLine(forceUnixStyle);

输出结果:

第一行[当前系统换行符]
第二行[当前系统换行符]
第三行[当前系统换行符]
第四行

第一行\n第二行\n第三行\n第四行

4. 字符串修剪

字符串修剪是移除字符串两端的空白字符的操作。使用 string.Trim 方法来实现。

internal class Program
{
    static void Main(string[] args)
    {
        string str = "   Hello World   ";

        string trimmed = str.Trim();
        string trimmedStart = str.TrimStart(); // "Hello, World!"(仅去除开头)
        string trimmedEnd = str.TrimEnd(); // "Hello, World!"(仅去除结尾)
        
        Console.WriteLine(trimmed); // 输出:Hello World
    }
}

5. 字符串截取

Substring的作用是截取字符串,如:"abcdef".Substring(1,3) → "bcd"

internal class Program
{
    static void Main(string[] args)
    {
        string data = "abcdef";
        Console.WriteLine(data.Substring(0,2)); //输出:ab
        Console.WriteLine(data.Substring(3));   //输出:def
    }
}

6. 字符串填充

  • 字符串填充:PadLeft / PadRight
  • PadLeft(totalWidth, paddingChar):当原字符串长度≥totalWidth时直接返回原值
  • 默认填充空格:“Text”.PadLeft(8) → " Text"
internal class Program
{
    static void Main(string[] args)
    {
        string data = "abcdef";

        string result = data.PadLeft(2,'*');
        Console.WriteLine(result);//输出:abcdef

        //总共9个字符,不足的左边补 * 
        result =data.PadLeft(9, '*');
        Console.WriteLine(result);  //输出:***abcdef
    }
}

数字前导补零(财务/流水号)

internal class Program
{
    static void Main(string[] args)
    {
        int orderNumber = 28;
        Console.WriteLine(orderNumber.ToString().PadLeft(6, '0'));  // 输出:000028

        string serialCode = "S" + 101.ToString().PadLeft(4, '0');
        Console.WriteLine(serialCode);                              // 输出:S0101
    }
}

掩码脱敏处理

string phone = "13612345678";
string masked = phone.Substring(0,3) + "****" + phone.Substring(7);
Console.WriteLine(masked.PadRight(13, '*')); // 输出"136****5678**"

7. 字符串插入

在字符串的指定索引位置插入新的子字符串,生成新字符串(原字符串不变)

string phoneNumber = "15512345678";

// 在索引3插入第一个分隔符
string formatted = phoneNumber.Insert(3, "-");
// 结果:"155-12345678"

// 继续在索引7插入第二个分隔符
formatted = formatted.Insert(7, "-");
// 结果:"155-1234-5678"

Console.WriteLine(formatted); // 输出:155-1234-5678

8. 删除字符

internal class Program
{
    static void Main(string[] args)
    {
        string data = "abcdef";
        Console.WriteLine(data.Remove(1));      // 输出:a

        Console.WriteLine(data.Remove(1,2));    // 输出:adef
    }
}

六、字符串格式化

1. 使用占位符

String.Format方法允许使用占位符进行字符串格式化:

string name = "John";
int age = 30;
string formattedText = string.Format("My name is {0} and I am {1} years old.", name, age);
Console.WriteLine(formattedText); // 输出: My name is John and I am 30 years old.

2. 使用插值字符串

C# 6.0引入了插值字符串,使格式化更加简洁:

string name = "John";
int age = 30;
string interpolatedText = $"My name is {name} and I am {age} years old.";
Console.WriteLine(interpolatedText); // 输出: My name is John and I am 30 years old.

七、字符串转换

1. 转换为大写和小写

使用ToUpperToLower方法可以转换字符串的大小写:

string text = "Hello, World!";
string upperText = text.ToUpper();
string lowerText = text.ToLower();
Console.WriteLine(upperText); // 输出: HELLO, WORLD!
Console.WriteLine(lowerText); // 输出: hello, world!

2. 转换为其他类型

使用Parse方法或TryParse可以将字符串转换为其他基本类型:

string numberStr = "123";
int number = int.Parse(numberStr);
Console.WriteLine(number); // 输出: 123

int safeNum = int.TryParse("abc", out int result); // 安全转换(返回 false)

//转字符数组
string str= "hello";
char[] chars = str.ToCharArray(); // ["H", "e", "l", "l", "o"]

结语

回到目录页:C#/.NET 知识汇总
希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。

### FasterWhisper 使用教程及相关信息 #### 下载 FasterWhisper 模型 FasterWhisper 的模型可以从 Hugging Face 上获取,具体下载地址为:[https://huggingface.co/Systran](https://huggingface.co/Systran)[^1]。 #### 安装 FasterWhisper 及其依赖项 为了使用 FasterWhisper,需要先克隆官方的项目仓库,并按照说明安装所需的依赖项。以下是具体的命令: ```bash git clone https://github.com/SYSTRAN/faster-whisper.git cd faster-whisper pip install -r requirements.txt ``` 上述操作会完成项目的初始化以及所需库的安装[^3]。 #### 使用 FasterWhisper 进行推理 以下是一个简单的 Python 脚本示例,展示如何加载 FasterWhisper 并执行语音转文字的任务: ```python from faster_whisper import WhisperModel model_size = "medium" model = WhisperModel(model_size, device="cuda", compute_type="float16") segments, info = model.transcribe("audio.mp3", beam_size=5) print(f"Detected language: {info.language}") for segment in segments: print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}") ``` 此脚本展示了如何加载 `medium` 尺寸的模型并将其部署到 GPU 设备上进行高性能推断。通过调整参数如 `beam_size` 和输入音频文件路径,可以实现更灵活的功能需求。 #### Windows 独立运行版本 如果希望在 Windows 环境下独立运行 FasterWhisper,则可参考另一个开源项目,该项目提供了预编译的支持包,详情见链接:[https://github.com/Purfview/whisper-standalone-win/releases/tag/libs][^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲤籽鲲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值