当前位置: 首页 > news >正文

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 知识汇总
希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。

相关文章:

  • 网页设计做网站首页现在如何进行网上推广
  • 做网站哪家比较好安徽建站
  • 营销网站建设的步骤过程网络搭建是干什么的
  • 推广网站的方法有搜索引擎营销、邮件营销网络营销促销策略有哪些
  • 做企业网站要多长时间冬镜seo
  • 做数据分析网站seo优化网站推广专员招聘
  • 检查SSH安全配置-sshd服务端未认证连接最大并发量配置
  • React Native 核心技术知识点快速入门
  • 用大白话解释日志处理Log4j 是什么 有什么用 怎么用
  • 45.matlab产生正弦叠加信号并保存为txt文本
  • 智能驾驶ai算法学习路线图
  • C# 使用 Newtonsoft.Json 序列化和反序列化对象实例
  • 冒泡排序算法优化
  • Spring Security是什么?如何使用Spring Security进行安全控制?
  • 如何查看react的版本号
  • 计算机网络 第一章 概述(Overview)
  • 《机器学习数学基础》补充资料:矩阵的LU分解
  • 【解决】OnTriggerEnter/OnTriggerExit 调用匿名委托误区的问题
  • Wireshark:自定义类型帧解析
  • el-switch切换之前二次确认
  • HarmonyOS NEXT组件深度全解:十大核心组件开发指南与实战
  • 三个小时学完vue3 —— 简单案例(二)
  • 力扣 划分字母区间
  • linux有哪些常用命令?
  • 华为在不同发展时期的战略选择(节选)
  • 达梦数据库系列之安装及Mysql数据迁移