C# 字符串(String)详解

**摘要:**本文系统讲解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 完全等价

说明:

  • stringSystem.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)
相关推荐
精明的身影1 小时前
C++自学之路1:Hello world
开发语言·c++
神奇小汤圆2 小时前
牛客网Java八股文|2026秋招面试题汇总(金九银十冲刺专用)
后端
cfm_29142 小时前
SpringBoot MockMvc
spring boot·后端·log4j
leo__5202 小时前
基于导航数据的扩展卡尔曼滤波(EKF)MATLAB 实现
开发语言·matlab
神奇小汤圆2 小时前
你的Java天花板,不是Spring Boot,是思维方式
后端
梨子同志2 小时前
Maven
后端
用户41659673693552 小时前
堡垒机 Web CLI 部署教程
后端
xiyueyezibile2 小时前
“自迭代” Skill 的 team-pitfalls 的演进
前端·后端·ai编程
叫我少年2 小时前
C# StringBuilder 基础入门
后端