- `String`
- 字符串字面量
- 字符串连接
- 字符串是不可变的
- 字符串比较
- 字符串方法
- 字符串插值
- 字符串和字符数组
- 字符串格式化
- 空字符串和 null
- 字符串的安全性
- 正则表达式
- 注意
- `String.Format`
- 基本语法
- 参数
- 基本使用
- 使用索引
- 指定对齐和宽度
- 使用格式字符串
- 组合使用
- 总结
C# String
在C#中,String 类型是一个非常常用的数据类型,用于表示文本数据。它是 System.String 类的一个实例,位于 System 命名空间中。以下是一些关于C#中 String 类型的基本操作和特性:
String
字符串字面量
字符串可以通过双引号 " 来定义:
string greeting = "Hello, World!";
字符串连接
可以使用 + 运算符来连接字符串:
string firstName = "John";
string lastName = "Doe";
string fullName = firstName + " " + lastName; // "John Doe"
或者使用 String.Concat 方法:
string fullName = String.Concat(firstName, " ", lastName);
字符串是不可变的
C#中的字符串是不可变的,这意味着一旦一个字符串被创建,它的内容就不能被改变。任何修改字符串的操作都会创建一个新的字符串实例。
string original = "Hello";
string modified = original.Substring(0, 5); // "Hello"
original = modified.ToUpper(); // "HELLO"
// original 被修改了,但 modified 保持不变
字符串比较
区分大小写:默认的字符串比较是区分大小写的。可以使用 == 和 != 运算符来比较两个字符串的值是否相等。
不区分大小写:使用 String.Compare 或 String.Equals 方法,并指定StringComparison.OrdinalIgnoreCase。
string a = "hello";
string b = "Hello";
bool areEqual = a == b; // falsebool areEqualIgnoreCase = String.Equals(a, b, StringComparison.OrdinalIgnoreCase); // true
字符串方法
String 类提供了许多有用的方法来操作字符串,例如:
Length或Length属性来获取字符串的长度。Substring来获取字符串的一部分。IndexOf来查找子字符串的位置。Replace来替换字符串中的字符或子字符串。ToLower和ToUpper来转换字符串的大小写。Trim来去除字符串两端的空白字符。
字符串插值
C# 6.0 引入了字符串插值功能,它允许你在字符串中直接插入变量:
string name = "Alice";
string message = $"Hello, {name}!";
字符串和字符数组
字符串可以转换为字符数组,反之亦然:
string text = "Sample";
char[] charArray = text.ToCharArray();string fromCharArray = new String(charArray);
字符串格式化
- 字符串插值:使用
${}或String.Format。 - 复合格式:使用
String.Format来格式化数字和其他类型。
string formatted = String.Format("The value is {0}.", 42);
// 或者使用字符串插值
string formatted = $"The value is {42}.";
空字符串和 null
空字符串("")与 null 字符串是不同的。空字符串是一个长度为0的字符串,而 null 表示没有引用任何对象。
字符串的安全性
- 避免注入:在处理用户输入时,确保进行适当的清理和验证。
- 编码和解码:使用
System.Text.Encoding类来处理字符串的编码和解码。
正则表达式
使用 System.Text.RegularExpressions.Regex 类:进行复杂的字符串匹配和替换。
注意
- 避免不必要的字符串连接:因为字符串是不可变的,频繁的连接操作会创建多个临时字符串对象。
- 使用
StringBuilder:对于大量字符串操作,使用StringBuilder来提高性能。StringBuilder与String使用相同。
使用StringBuilder比使用+运算符连接字符串要高效得多,因为它避免了在每次迭代中创建新的字符串对象。 StringBuilder是线程安全的,但是Append方法不是线程安全的。如果你在多线程环境中使用StringBuilder,需要自己管理线程同步。
StringBuilder的Capacity属性可以设置其最大容量,但通常不需要手动设置,因为StringBuilder会自动调整容量。
String.Format
String.Format 是 C# 中的一个非常有用的字符串方法,它允许你创建一个格式化的字符串,其中包含零个或多个占位符,这些占位符由后续参数的值替换。这个方法提供了一种灵活的方式来构建包含变量或表达式的字符串。
基本语法
String.Format(string format, object arg0 [, object arg1, ...])
参数
format:一个字符串,包含零个或多个由花括号 {} 包围的占位符。这些占位符的形式可以是 {index[,alignment][:formatString]}。
index 是参数的索引,从0开始。
alignment 是可选的,表示占位符的宽度和对齐方式。
formatString 是可选的,表示格式信息,如数字格式、日期格式等。
arg0 到 argN:是要插入到格式化字符串中的参数。
示例
下面是一些使用 String.Format 的示例:
基本使用
string name = "Alice";
int age = 30;
string message = String.Format("Hello, {0}. You are {1} years old.", name, age);
// message 的内容将是 "Hello, Alice. You are 30 years old."
使用索引
string message = String.Format("Hello, {1} and {0}.", "Alice", "Bob");
// message 的内容将是 "Hello, Bob and Alice."
指定对齐和宽度
string message = String.Format("Hello, {0,10}. You are {1,5} years old.", name, age);
// "Alice" 将右对齐并占据至少10个字符的宽度,"30" 将占据至少5个字符的宽度
使用格式字符串
DateTime date = DateTime.Now;
string formattedDate = String.Format("Today is {0:dddd, MMMM dd, yyyy}", date);
// 格式化日期,例如 "Today is Monday, April 03, 2023"
组合使用
string message = String.Format("Hello, {0}. Your balance is {1,10:C}.", name, 123456.78);
// "Alice" 后面跟着一个至少10个字符宽度的货币格式的余额
总结
String.Format 是一个非常强大的工具,可以用来创建具有复杂格式要求的字符串。它在需要将变量插入到字符串模板中时特别有用,例如在生成报告、日志消息或用户界面文本时。