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.CompareString.Equals 方法,并指定StringComparison.OrdinalIgnoreCase

string a = "hello";
string b = "Hello";
bool areEqual = a == b; // false

bool areEqualIgnoreCase = 
	String.Equals(a, b, StringComparison.OrdinalIgnoreCase); // true

字符串方法

String 类提供了许多有用的方法来操作字符串,例如:

  • LengthLength 属性来获取字符串的长度。
  • Substring 来获取字符串的一部分。
  • IndexOf 来查找子字符串的位置。
  • Replace 来替换字符串中的字符或子字符串。
  • ToLowerToUpper 来转换字符串的大小写。
  • 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 来提高性能。StringBuilderString使用相同。
    使用 StringBuilder 比使用 + 运算符连接字符串要高效得多,因为它避免了在每次迭代中创建新的字符串对象。
  • StringBuilder 是线程安全的,但是 Append 方法不是线程安全的。如果你在多线程环境中使用 StringBuilder,需要自己管理线程同步。
    StringBuilderCapacity 属性可以设置其最大容量,但通常不需要手动设置,因为 StringBuilder 会自动调整容量。

String.Format

String.FormatC# 中的一个非常有用的字符串方法,它允许你创建一个格式化的字符串,其中包含零个或多个占位符,这些占位符由后续参数的值替换。这个方法提供了一种灵活的方式来构建包含变量或表达式的字符串。

基本语法

String.Format(string format, object arg0 [, object arg1, ...])

参数

format:一个字符串,包含零个或多个由花括号 {} 包围的占位符。这些占位符的形式可以是 {index[,alignment][:formatString]}
index 是参数的索引,从0开始。
alignment 是可选的,表示占位符的宽度和对齐方式。
formatString 是可选的,表示格式信息,如数字格式、日期格式等。
arg0argN:是要插入到格式化字符串中的参数。
示例
下面是一些使用 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 是一个非常强大的工具,可以用来创建具有复杂格式要求的字符串。它在需要将变量插入到字符串模板中时特别有用,例如在生成报告、日志消息或用户界面文本时。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部