C# 字符串
string 类型表示 Unicode 字符的字符串
C# 字符串是使用 string 关键字声明的一个字符数组。字符串是使用双引号声明的,单个字符使用单引号如下例所示:
char c = '@'; 基本字符串操作 创建新字符串
方法名 | 使用 |
---|---|
String.Format |
从一组输入对象生成格式化的字符串。 |
String.Concat |
从两个或多个字符串生成字符串。 |
String.Join |
通过合并字符串数组生成新字符串。 |
String.Insert |
通过将一个字符串插入到现有字符串的指定索引处生成新的字符串。 |
String.CopyTo |
String.CopyTo 方法将字符串的一些部分复制到一个字符数组中。可以同时指定字符串的开始索引和要复制的字符数。此方法带有四个参数,即源索引、字符数组、目标索引和要复制的字符数。所有索引都是从零开始的。 |
String.Format("{0},China {1}",var1,var2); {}中数字必须从0开始
String.Concat(str1," and ",str2);
string[] MyString = {"Hello", "and", "welcome", "to", "my" , "world!"};
Console.WriteLine(String.Join(" ", MyString));
MyString.CopyTo(0, MyCharArray,0 ,5);
剪裁和移除字符
方法名 | 使用 |
---|---|
String.Trim |
从字符串的开头和结尾处移除空白。 |
String.TrimEnd |
从字符串的结尾处移除在字符数组中指定的字符。 |
String.TrimStart |
从字符串的开头移除在字符数组中指定的字符。 |
String.Remove |
从字符串中的指定索引位置移除指定数量的字符。 |
填充字符串
- String.PadLeft 右对齐并填充字符串,以使字符串最右侧的字符到该字符串的开头为指定的距离。
-
string MyString = "Hello World!"; Console.WriteLine(MyString.PadLeft(20, '-')); - String.PadRight 左
方法名 | 使用 |
---|---|
String.Compare |
比较两个字符串的值。返回整数值。 |
String.CompareOrdinal |
比较两个字符串而不考虑本地区域性。返回整数值。 |
String.CompareTo |
将当前字符串对象与另一个字符串进行比较。返回整数值。 |
String.StartsWith |
确定一个字符串是否以传递的字符串开头。返回布尔值。 |
String.EndsWith |
确定一个字符串是否以传递的字符串结尾。返回布尔值。 |
String.Equals |
确定两个字符串是否相同。返回布尔值。 |
String.IndexOf |
返回字符或字符串的索引位置,索引位置从正在检查的字符串的开头开始。返回整数值。 |
String.LastIndexOf |
返回字符或字符串的索引位置,索引位置从正在检查的字符串的结尾开始。返回整数值。 |
string s1 = "orange";
string s2 = "red";
s1 += s2;
字符串对象是“不可变的”,即它们一旦创建就无法更改。对字符串进行操作的方法实际上返回的是新的字符串对象。在前面的示例中,将 s1 和 s2 的内容连接起来以构成一个字符串时,包含 "orange" 和 "red" 的两个字符串均保持不变。+= 运算符会创建一个包含组合内容的新字符串。结果是 s1 现在引用一个完全不同的字符串。只包含 "orange" 的字符串仍然存在,但连接 s1 后将不再被引用。
因此,出于性能方面的原因,大量的连接或其他涉及字符串的操作应当用 StringBuilder 类执行,如下所示:
使用字符串
转义符 字符串中可以包含转义符,如“\n”(新行)和“\t”(制表符)。
如果希望包含反斜杠,则它前面必须还有另一个反斜杠 string filePath = "\\\\My Documents\\"; 实际上等同于: \\My Documents\
@ 符号 @ 符号会告知字符串构造函数忽略转义符和分行符。
ToString() 如同所有从 Object 派生的对象一样,字符串也提供了 ToString 方法,用于将值转换为字符串。此方法可用于将数值转换为字符串
访问各个字符 字符串中所包含的各个字符可以使用以下方法进行访问,如 SubString()、Replace(),、Split() 和 Trim()。
更改大小写 ToUpper() 或 ToLower()
比较 比较两个字符串的最简单方法是使用 == 和 != 运算符,执行区分大小写的比较。
字符串对象也有一个 CompareTo() 方法,它根据某个字符串是否小于 (<) 或大于 (>) 另一个,返回一个整数值。比较字符串时使用 Unicode 值,小写的值小于大写的值。还可用 Compare(,),Equals()
搜索 若要在一个字符串中搜索另一个字符串,可以使用 IndexOf(),LastIndexOf()。如果未找到搜索字符串,IndexOf() 返回 -1;否则,返回它出现的第一个位置的索引(从零开始)。
任何字符 字符串可以包含包括转义序列在内的任何字符:string a = "\\\u0066\n";
拆分 将字符串拆分为子字符串(如将句子拆分为各个单词)是一个常见的编程任务。Split() 方法使用分隔符(如空格字符)char 数组,并返回一个子字符串数组。您可以使用 foreach 访问此数组
修改字符串内容
下面的示例使用 ToCharArray 方法来将字符串的内容提取到 char 类型的数组中。然后修改此数组中的某些元素。之后,使用 char 数组创建新的字符串实例。
使用 StringBuilder
设置容量和长度
StringBuilder MyStringBuilder = new StringBuilder("Hello World!", 25);
另外,可以使用读/写 Capacity 属性来设置对象的最大长度。下面的示例使用 Capacity 属性来定义对象的最大长度。如:MyStringBuilder.Capacity = 25
方法名 | 使用 |
---|---|
StringBuilder.Append |
将信息追加到当前 StringBuilder 的结尾。 |
StringBuilder.AppendFormat |
用带格式文本替换字符串中传递的格式说明符。 |
StringBuilder.Insert |
将字符串或对象插入到当前 StringBuilder 对象的指定索引处。 |
StringBuilder.Remove |
从当前 StringBuilder 对象中移除指定数量的字符。 |
StringBuilder.Replace |
替换指定索引处的指定字符。 |
StringBuilder 类创建了一个字符串缓冲区,用于在程序执行大量字符串操作时提供更好的性能。StringBuilder 字符串还允许您重新分配个别字符,这些字符是内置字符串数据类型所不支持的。例如,此代码在不创建新字符串的情况下更改了一个字符串的内容:
在本示例中,StringBuilder 对象用于从一组数值类型中创建字符串:
使用正则表达式搜索字符串
System.Text.RegularExpressions.Regex
以下代码是用于对数组中的字符串执行简单的不区分大小写的搜索,第三个参数 RegexOptions 指示忽略大小写,
以下代码使用正则表达式验证数组中每个字符串的格式。验证要求每个字符串具有电话号码的形式,即用短划线将数字分成三组,前两组各包含三个数字,第三组包含四个数字。这是通过正则表达式 ^\\d{3}-\\d{3}-\\d{4}$ 完成的。
{
static void Main()
{
string[] numbers =
{
"123-456-7890",
"444-234-22450",
"690-203-6578",
"146-893-232",
"146-839-2322",
"4007-295-1111",
"407-295-1111",
"407-2-5555",
};
string sPattern = "^\\d{3}-\\d{3}-\\d{4}$";
foreach (string s in numbers)
{
System.Console.Write("{0,14}", s);
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern))
{
System.Console.WriteLine(" - valid");
}
else
{
System.Console.WriteLine(" - invalid");
}
}
}
}
{
static void Main()
{
string[] sentences =
{
"cow over the moon",
"Betsy the Cow",
"cowering in the corner",
"no match here"
};
string sPattern = "cow";
foreach (string s in sentences)
{
System.Console.Write("{0,24}", s);
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
System.Console.WriteLine(" (match for '{0}' found)", sPattern);
}
else
{
System.Console.WriteLine();
}
}
}
}
{
static void Main()
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
// Create a string composed of numbers 0 - 9
for (int i = 0; i < 10; i++)
{
sb.Append(i.ToString());
}
System.Console.WriteLine(sb); // displays 0123456789
// Copy one character of the string (not possible with a System.String)
sb[0] = sb[9];
System.Console.WriteLine(sb); // displays 9123456789
}
}
sb[0] = 'C';
System.Console.WriteLine(sb.ToString());
System.Console.ReadLine();
{
static void Main()
{
string str = "The quick brown fox jumped over the fence";
System.Console.WriteLine(str);
char[] chars = str.ToCharArray();
int animalIndex = str.IndexOf("fox");
if (animalIndex != -1)
{
chars[animalIndex++] = 'c';
chars[animalIndex++] = 'a';
chars[animalIndex] = 't';
}
string str2 = new string(chars);
System.Console.WriteLine(str2);
}
}
string s10 = "The cat sat on the mat.";
foreach (string substr in s10.Split(delimit))
{
System.Console.WriteLine(substr);
}