总目录
前言
在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. 转换为大写和小写
使用ToUpper
和ToLower
方法可以转换字符串的大小写:
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 知识汇总
希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。