**摘要:**本文系统讲解C#字符串的核心特性与操作方法。字符串是System.String类的对象,具有不可变性(Immutable)特点,任何修改都会创建新对象。文章详细介绍了字符串的三种创建方式、长度获取、字符访问以及四种拼接方法(推荐字符串插值)。同时涵盖了字符串比较、常用方法(Contains、IndexOf、Substring、Replace等)、类型转换、遍历方式、空值判断以及性能优化技巧(StringBuilder)。最后介绍了转义字符、逐字字符串和C# 11+的原始字符串特性,为C#开发者提供完整的字符串操作指南。
在 C# 中,字符串(String) 是最常用的数据类型之一,用于存储文本数据。字符串实际上是 System.String 类的对象,因此可以使用大量内置方法进行操作。
cs
string name = "Hello";
String name2 = "World"; // String 和 string 完全等价
说明:
string是System.String的别名(推荐使用)String是 .NET 类名
一、字符串的特点
1、字符串是引用类型
cs
string s = "abc";
虽然是引用类型,但它的使用方式和普通变量非常相似。
2、字符串不可修改(Immutable)
这是 C# String 最重要的特点。
例如:
cs
string s = "Hello";
s += " World";
Console.WriteLine(s);
输出:
Hello World
实际上发生的是:
cs
原字符串
Hello
↓
创建新字符串
Hello World
↓
变量 s 指向新字符串
原来的 "Hello" 并没有修改。
因此:
String 永远不会修改自己
只会创建新的字符串
二、字符串创建方式
方法1:直接赋值(最常用)
cs
string str = "Hello";
方法2:new
cs
string str = new string('A', 5);
Console.WriteLine(str);
输出:
AAAAA
方法3:字符数组
cs
char[] chars =
{
'H',
'e',
'l',
'l',
'o'
};
string str = new string(chars);
Console.WriteLine(str);
输出:
Hello
三、字符串长度
使用:
Length
例如:
cs
string str = "Hello";
Console.WriteLine(str.Length);
输出:
5
四、访问字符串字符
字符串可以像数组一样访问。
cs
string str = "Hello";
Console.WriteLine(str[0]);
Console.WriteLine(str[1]);
Console.WriteLine(str[4]);
输出:
H
e
o
注意:
不能修改
str[0] = 'A';
错误:
字符串不可修改
五、字符串拼接
方法1:+
cs
string first = "Hello";
string second = "World";
string result = first + " " + second;
Console.WriteLine(result);
输出:
Hello World
方法2:+=
cs
string s = "Hello";
s += " C#";
结果:
Hello C#
方法3:String.Concat
cs
string str = String.Concat("A", "B", "C");
Console.WriteLine(str);
输出:
ABC
方法4:字符串插值(推荐)
cs
string name = "Tom";
int age = 18;
string info = $"姓名:{name} 年龄:{age}";
输出:
姓名:Tom 年龄:18
这是现代 C# 最推荐的方式。
六、字符串格式化
旧方法:
cs
string str = String.Format(
"姓名:{0} 年龄:{1}",
"Tom",
18);
输出:
姓名:Tom 年龄:18
现在更推荐
$"姓名:{name} 年龄:{age}"
七、字符串比较
==
cs
string a = "abc";
string b = "abc";
Console.WriteLine(a == b);
输出:
True
比较的是内容,而不是地址。
Equals()
Console.WriteLine(a.Equals(b));
输出:
True
Compare()
cs
Console.WriteLine(
String.Compare("abc", "abd")
);
返回:
<0
说明:
abc < abd
返回值:
0 相等
<0 前面小
>0 前面大
八、常用字符串方法
1、Contains()
是否包含
cs
string str = "Hello World";
Console.WriteLine(
str.Contains("World")
);
输出:
True
2、StartsWith()
str.StartsWith("He");
结果:
True
3、EndsWith()
str.EndsWith("ld");
结果:
True
4、IndexOf()
查找位置
Console.WriteLine(
str.IndexOf("World")
);
输出:
6
没有找到:
-1
5、LastIndexOf()
从后找
str.LastIndexOf("o");
6、Substring()
截取字符串
cs
string str = "Hello World";
Console.WriteLine(
str.Substring(6)
);
输出:
World
指定长度:
str.Substring(6, 3);
输出:
Wor
7、Replace()
替换
cs
string str = "I like Java";
str = str.Replace(
"Java",
"C#"
);
Console.WriteLine(str);
输出:
I like C#
8、ToUpper()
Console.WriteLine(
"abc".ToUpper()
);
输出:
ABC
9、ToLower()
Console.WriteLine(
"ABC".ToLower()
);
输出:
abc
10、Trim()
去掉两边空格
cs
string str = " Hello ";
Console.WriteLine(
str.Trim()
);
输出:
Hello
还有:
TrimStart()
TrimEnd()
11、Split()
拆分字符串
cs
string str = "苹果,香蕉,西瓜";
string[] arr = str.Split(',');
foreach (string s in arr)
{
Console.WriteLine(s);
}
输出:
苹果
香蕉
西瓜
12、Join()
拼接数组
string[] arr =
{
"A",
"B",
"C"
};
Console.WriteLine(
String.Join("-", arr)
);
输出:
A-B-C
九、字符串转数字
cs
string str = "123";
int num = int.Parse(str);
Console.WriteLine(num + 1);
输出:
124
使用 TryParse 更安全:
cs
string str = "123";
if (int.TryParse(str, out int num))
{
Console.WriteLine(num);
}
else
{
Console.WriteLine("转换失败");
}
十、数字转字符串
cs
int num = 100;
string s = num.ToString();
或者:
Convert.ToString(num);
十一、逐字符遍历字符串
1.for
cs
string str = "Hello";
for (int i = 0; i < str.Length; i++)
{
Console.WriteLine(str[i]);
}
2.foreach
cs
foreach (char c in "Hello")
{
Console.WriteLine(c);
}
十二、空字符串与 null
cs
string s1 = "";
string s2 = null;
区别:
"" 长度为0
null 没有对象
推荐判断:
String.IsNullOrEmpty(s);
或者:
String.IsNullOrWhiteSpace(s);
示例:
cs
string s = " ";
Console.WriteLine(
String.IsNullOrWhiteSpace(s)
);
输出:
True
十三、字符串性能优化------StringBuilder
如果需要频繁拼接字符串(如循环中),推荐使用 StringBuilder。
cs
using System.Text;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++)
{
sb.Append(i);
}
string result = sb.ToString();
原因:
string每次拼接都会创建新的字符串对象。StringBuilder在内部维护可扩展缓冲区,减少对象创建,性能更高。
十四、转义字符
string s = "Hello\nWorld";
输出:
Hello
World
常见转义字符:
| 转义字符 | 含义 |
|---|---|
\n |
换行 |
\r |
回车 |
\t |
制表符 |
\\ |
反斜杠 |
\" |
双引号 |
\' |
单引号 |
十五、逐字字符串(Verbatim String)
使用 @ 可以避免大量转义。
cs
string path = @"C:\Users\Admin\Desktop";
Console.WriteLine(path);
输出:
C:\Users\Admin\Desktop
多行字符串:
string text = @"第一行
第二行
第三行";
十六、原始字符串(Raw String,C# 11+)
C# 11 引入了三引号原始字符串,特别适合编写 JSON、SQL、HTML 等内容。
cs
string json = """
{
"name": "Tom",
"age": 18
}
""";
Console.WriteLine(json);
特点:
- 无需转义双引号。
- 保留换行和缩进。
- 非常适合嵌入大段文本。
十七、总结
| 功能 | 常用方法/属性 |
|---|---|
| 获取长度 | Length |
| 获取字符 | str[index] |
| 拼接 | +、+=、$""、String.Concat() |
| 比较 | ==、Equals()、String.Compare() |
| 查找 | Contains()、IndexOf()、LastIndexOf() |
| 截取 | Substring() |
| 替换 | Replace() |
| 大小写转换 | ToUpper()、ToLower() |
| 去空格 | Trim()、TrimStart()、TrimEnd() |
| 分割 | Split() |
| 合并 | String.Join() |
| 判断空值 | String.IsNullOrEmpty()、String.IsNullOrWhiteSpace() |
| 数字转换 | Parse()、TryParse()、ToString() |
| 高性能拼接 | StringBuilder |
| 特殊字符串 | @""、$""、""" """(Raw String) |