C#基础系列之System.String的深入理解
前言
String 是 C# 中的一个非常重要且常用的数据类型,使用频率很高。本文主要讲解 String 的定义、初始化、赋值、整体替换、部分替换、常见方法、比较方式、特殊字符的处理等。
定义和初始化
定义一个 String 变量,可以使用以下语法:
string str;
这样定义的变量不会被初始化,其值是 null。(注意:string 是 C# 中的关键字,表示 String 数据类型)
使用以下语法可以将字符串赋值给 String 变量:
string str = "Hello World!";
如果要定义一个空字符串,可以使用以下语法:
string emptyStr = string.Empty;
在一些需要处理大量字符串的情况下,如果频繁地使用字符串连接操作,会导致大量的内存开销和性能问题。为了避免这个问题,可以使用 StringBuilder 类来代替 String 类。在每次进行字符串连接时,都会创建一个新的 String 对象,并且在垃圾回收时需要清理这些无用对象。而 StringBuilder 类是使用缓冲区来存储字符串,可以在不产生新的 String 对象的前提下进行字符串连接操作,从而提高性能。以下是使用 StringBuilder 类的语法:
StringBuilder sb = new StringBuilder();
sb.Append("Hello");
sb.Append(",");
sb.Append("World");
string result = sb.ToString();
赋值
String 类的值是不可变的,也就是说,一旦某个字符串被赋值给一个 String 变量或常量,那么这个字符串的值就不能改变了。每次对字符串进行操作时,都是生成一个新的字符串。
以下是修改字符串的示例:
string str = "Hello World!";
str = str + " Goodbye!";
在上面的示例中,str 的值被修改了,但是实际上是创建了一个新的字符串,再将它赋值给 str。
字符串常见方法
长度和索引
可以使用 Length 属性获取字符串的长度,使用索引来访问字符串中的某个字符,这里的索引是从 0 开始的。
string str = "Hello World!";
int length = str.Length; // 获取字符串的长度
char firstChar = str[0]; // 访问字符串的第一个字符
比较字符串
可以使用 == 操作符或 Equals 方法来比较两个字符串是否相同:
string str1 = "Hello";
string str2 = "World";
bool isEqual1 = str1 == str2; // false
bool isEqual2 = str1.Equals(str2); // false
另外,还可以比较字符串的大小写,使用 IgnoreCase 参数来忽略大小写。
string str1 = "Hello";
string str2 = "hello";
// 忽略大小写比较
bool isEqual1 = str1.Equals(str2, StringComparison.OrdinalIgnoreCase); // true
bool isEqual2 = string.Compare(str1, str2, StringComparison.OrdinalIgnoreCase) == 0; // true
截取字符串
可以使用 Substring 方法来截取字符串,该方法需要两个参数:起始索引和要截取的字符数。
string str = "Hello World!";
string subStr1 = str.Substring(0, 5); // Hello
string subStr2 = str.Substring(6); // World!
去除空格
可以使用 Trim 方法来去除字符串两端的空格。
string str = " Hello World! ";
string trimmedStr = str.Trim(); // Hello World!
分割字符串
可以使用 Split 方法来将一个字符串分割成多个子字符串,该方法需要一个分隔符参数。
string str = "Hello,World,!";
string[] parts = str.Split(','); // ["Hello", "World", "!"]
特殊字符的处理
String 类中包含一些特殊的字符,这些字符需要使用特殊的转义序列来处理。
特殊字符 | 转义序列 |
---|---|
\r | \\r |
\n | \\n |
\t | \\t |
\" | \\\" |
\' | \\' |
\ | \\\\ |
在 C# 中,也可以使用 @"..." 表示字符串字面量,这样就不需要手动处理特殊字符。
// 使用转义序列
string str1 = "Hello\n\tWorld!";
// 使用字符串字面量
string str2 = @"Hello
World!";
示例说明
示例一:使用 StringBuilder 进行字符串连接
下面的示例演示了如何使用 StringBuilder 进行字符串连接操作。当连接字符串的次数较多时,使用 StringBuilder 可以确保只会创建一个新的字符串对象,而不是每次连接都创建一个新的字符串对象。
using System;
using System.Text;
class Program
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100000; i++)
{
sb.Append("a");
}
string result = sb.ToString();
Console.WriteLine(result.Length); // 输出:100000
}
}
在这个示例中,我们使用了 StringBuilder 类来连接一个 10 万次的字符串。在循环过程中,每次都会将字符 "a" 追加到 StringBuilder 中。最后,使用 ToString 方法将 StringBuilder 转换成一个 String 对象,并输出字符串的长度。
示例二:字符串常用方法的演示
下面的示例演示了 String 类的一些常用方法,包括 Length、Substring、Trim、Split、Replace 等。
using System;
class Program
{
static void Main(string[] args)
{
string str = " Hello, World! ";
Console.WriteLine("Length: " + str.Length); // 输出:18
string subStr1 = str.Substring(0, 5);
Console.WriteLine("Substring: " + subStr1); // 输出:Hello
string subStr2 = str.Substring(7);
Console.WriteLine("Substring: " + subStr2); // 输出:World!
string trimmedStr = str.Trim();
Console.WriteLine("Trimmed: " + trimmedStr); // 输出:Hello, World!
string[] parts = str.Split(',');
Console.Write("Parts: ");
foreach (var part in parts)
{
Console.Write(part.Trim() + " ");
}
Console.WriteLine();
// 输出:Parts: Hello World!
string replacedStr = str.Replace("Hello", "Goodbye");
Console.WriteLine("Replaced: " + replacedStr); // 输出: Goodbye, World!
}
}
在这个示例中,我们使用 String 类的一些常用方法演示了字符串的各种操作。可以看出,对字符串的操作在操作时会生成新的字符串对象,可以通过一些技巧来减少不必要的字符串拼接。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#基础系列之System.String的深入理解 - Python技术站