C# 入门基础知识 - 字符与字符串
- [第6节 字符与字符串](#第6节 字符与字符串)
-
- [6.1 字符、转义字符及字符串简介](#6.1 字符、转义字符及字符串简介)
- [6.3 字符串的大小写转换](#6.3 字符串的大小写转换)
- [6.4 字符串的比较](#6.4 字符串的比较)
- [6.5 字符串的格式化](#6.5 字符串的格式化)
- [6.6 字符串的截取](#6.6 字符串的截取)
- [6.7 字符串的分割](#6.7 字符串的分割)
- [6.8 字符串的合并](#6.8 字符串的合并)
- [6.9 字符串的插入与填充](#6.9 字符串的插入与填充)
- [6.10 字符串的删除](#6.10 字符串的删除)
更多C#基础知识点可查看:C#学习笔记 - C#基础知识 - C#从入门到放弃
第6节 字符与字符串
6.1 字符、转义字符及字符串简介
在C#中,字符 以单引号(' '
)括起来,例如'a'、'b'、'c'等。字符类型数据char只能表示一个字符。
转义字符是一种特殊的字符序列,由反斜杠(\)后面跟着一个或多个字符组成。它们被用来表示一些特殊的字符或执行一些特定的操作。
以下是一些常见的转义字符:
csharp
\n:换行符
\r:回车符
\t:制表符
\':单引号
\":双引号
\\:反斜杠
字符串由0个或多个字符组成的有限序列,是System.String类的一个引用类型,在C#中是一个基本类型,可以申明为一个变量并赋值。string类型变量可以看作是char变量的只读数组
6.3 字符串的大小写转换
ToUpper( )
和ToLower( )
方法来转换字符串的大小写:
ToUpper( )
方法将字符串中的所有字符转换为大写形式,而ToLower( )
方法将字符串中的所有字符转换为小写形式。
大小写转换的示例:
csharp
string str = "Hello World";
string upperCase = str.ToUpper(); // "HELLO WORLD"
string lowerCase = str.ToLower(); // "hello world"
这两个方法会创建一个新的字符串对象,并返回转换后的副本,原始字符串对象的值不会改变。所以需要将转换后的结果赋给一个新的字符串变量。
此外,还可以使用InvariantCultureIgnoreCase
属性在不考虑区域性的情况下进行不区分大小写的比较,例如:
csharp
string str1 = "Hello";
string str2 = "HELLO";
bool equalsIgnoreCase = string.Equals(str1, str2, StringComparison.InvariantCultureIgnoreCase);
// true
这里string.Equals( )
方法的第三个参数指定了比较时忽略大小写的方式。
6.4 字符串的比较
字符串比较有以下几种方法:
① str1 == str2 :这种方式使用运算符==
来比较两个字符串的内容是否相等。返回一个布尔值,如果相等则为true,否则为false。这是最常见的字符串比较方法。
csharp
//使用运算符进行字符串比较:
string str1 = "Hello";
string str2 = "World";
bool isEqual = (str1 == str2); // false
bool isEqualIgnoreCase = (str1.Equals(str2, StringComparison.OrdinalIgnoreCase)); // false
② string.Equals(str1,str2) :这种方式使用Equals( )
方法来比较两个字符串的内容是否相等。返回一个布尔值,如果相等则为true,否则为false。还可以通过第三个参数指定字符串比较的规则(大小写敏感或不敏感)。
csharp
//使用Equals()方法进行字符串比较:
string str1 = "Hello";
string str2 = "World";
bool isEqual = string.Equals(str1, str2); // false
bool isEqualIgnoreCase = string.Equals(str1, str2, StringComparison.OrdinalIgnoreCase); // false
③ string.Compare(str1,str2) :
比较str1和str2的大小关系,返回一个整数值。如果str1小于str2,则返回一个负数;如果str1大于str2,则返回一个正数;如果两个字符串相等,则返回0。
csharp
int result = string.Compare("apple", "banana");
// result < 0,因为"apple"在字母排序中小于"banana"
Compare(str1,str2, bool): 指定是否进行大小写不敏感的比较。如果bool为true,则进行大小写不敏感的比较;如果为false,则进行大小写敏感的比较。
csharp
int result = string.Compare("apple", "APPLE", true);
// result = 0,因为不区分大小写,"apple"和"APPLE"被认为是相等的
Compare(str1, index1,str2, index2, length): 比较指定位置开始的一部分字符,可以比较字符串中的子串。
csharp
int result = string.Compare("apple", 1, "banana", 3, 2);
// result < 0,因为"pp"在字母排序中小于"an"
④ str1.CompareTo(str2) :这种方式是通过使用CompareTo( )
方法比较两个字符串的大小关系。返回一个整数值,表示两个字符串的比较结果。如果str1小于str2,则返回一个负数;如果str1大于str2,则返回一个正数;如果两个字符串相等,则返回0。
6.5 字符串的格式化
字符串格式化是一种用于将变量的值插入到字符串中的技术,使其更具可读性和可维护性。C#提供了多种字符串格式化的方法,以下是其中几种常见的方式:
1、插值字符串(Interpolated Strings):
使用 $
符号和花括号 { }
来插入变量的值到字符串中。
csharp
string name = "Flyer";
int age = 24;
Console.WriteLine($"My name is {name} and I'm {age} years old.");
2、字符串格式化方法(String.Format):
使用 String.Format
方法将提供的参数按照指定的格式转换并插入到字符串中。
csharp
string name = "Flyer";
int age = 24;
Console.WriteLine("My name is {0} and I'm {1} years old.", name, age);
3、占位符(Placeholders):
使用大括号 { }
中的数字或名称来标识要插入的变量位置,用后面提供的参数替换。
csharp
string name = "Flyer";
int age = 24;
string message = "My name is {0} and I'm {1} years old.";
string formattedMessage = String.Format(message, name, age);
4、格式化字符串(Format Strings):
使用 { }
内的格式化规范来指定要插入值的具体显示方式,如数字格式、日期格式等。
csharp
decimal price = 19.99m;
DateTime date = DateTime.Now;
Console.WriteLine($"The price is {price:C2} and the date is {date:yyyy-MM-dd}.");
【示例】打印出001-050。
csharp
//输出格式化字符串 001-050
for(int i=1;i<=50;i++)
{
string mystr = string.Format("{0:D3}",i);
Console.Write(mystr+" ");
if(i%10 == 0)
Console.WriteLine( );
}
Console.ReadKey();
执行程序:
csharp
001 002 003 004 005 006 007 008 009 010
011 012 013 014 015 016 017 018 019 020
021 022 023 024 025 026 027 028 029 030
031 032 033 034 035 036 037 038 039 040
041 042 043 044 045 046 047 048 049 050
6.6 字符串的截取
字符串截取函数:
csharp
Substring(n);
Substring(n,m);
Substring( )
方法可用于从给定的字符串中返回一个新的字符串,该新字符串包含从指定索引开始的一定数量的字符。Substring( )
方法还可以使用负数索引。例如,Substring(-5)
表示从倒数第5个字符开始截取到字符串末尾。
csharp
string str = "Hello, world!";
string substr1 = str.Substring(7); // 从索引为7的位置开始截取,返回 "world!"
string substr2 = str.Substring(7, 5); // 从索引为7的位置开始截取,截取长度为5,返回 "world"
//字符串的起始位是0
Substring( )
方法的第一个参数是截取的起始索引,第二个可选参数是截取的长度。如果没有提供第二个参数,则默认截取到字符串的末尾。
其他的方法可以用于字符串截取或提取子字符串,例如:
Remove(startIndex)
:从字符串中移除从指定索引开始的所有字符,并返回结果字符串。
Remove(startIndex, length)
:从字符串中移除从指定索引开始,指定长度的字符,并返回结果字符串。
【示例】
csharp
//1、字符串截取
Console.WriteLine("//1、字符串截取");
string str = "Hello, world!";
string substr1 = str.Substring(7); // 从索引为7的位置开始截取,返回 "world!"
string substr2 = str.Substring(7, 5); // 从索引为7的位置开始截取,截取长度为5,返回 "world"
//字符串的起始位是0
Console.WriteLine("substr1的返回结果是:{0}\nsubstr2的返回结果是:{1}",substr1,substr2);
Console.WriteLine("");
//2、对单词格式化处理,将首字母大写,其余字母小写
Console.WriteLine("//2、对单词格式化处理,将首字母大写,其余字母小写");
Console.WriteLine("输入一个英文单词字符串,不区分大小写:");
string word = Console.ReadLine(); //cHIpTIcKs
string firstWord = word.Substring(0,1).ToUpper(); //截取首字母,转换为大写
string otherWord = word.Substring(1).ToLower(); //截取除首字母以外的字符串
Console.WriteLine("处理前的单词:{0}",word);
Console.WriteLine("处理后的单词:{0}{1}",firstWord,otherWord);
Console.WriteLine("");
运行程序:
csharp
//1、字符串截取
substr1的返回结果是:world!
substr2的返回结果是:world
//2、对单词格式化处理,将首字母大写,其余字母小写
输入一个英文单词字符串,不区分大小写:
cHIpTIcKs
处理前的单词:cHIpTIcKs
处理后的单词:Chipticks
6.7 字符串的分割
字符串分割方法Split( )
:
Split( )
方法来分割一个字符串为子字符串数组,基于指定的分隔符将字符串拆分成多个部分。
【示例1】
csharp
string str = "apple,banana,orange";
string[] fruits = str.Split(',');
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
使用 Split(',') 方法将字符串 str 按照逗号分隔符进行分割,将其拆分成了一个包含三个元素的子字符串数组。在 foreach 循环中逐个打印出了拆分后的子字符串。除了逗号也可以使用其他字符或字符串作为分隔符来进行字符串的切割。例如,使用空格作为分隔符,可以将 Split(' ') 作为参数传递给 Split( ) 方法。Split( ) 方法还支持使用字符数组作为分隔符,例如 Split(new char[] { ',', ';' }),可以同时使用逗号和分号进行字符串的分割。
【示例2】
csharp
string myInfo = "Flyer.Cheng-Man-24.unv_bk.CV_engger-1888888888";
string[] SpMyInfos = myInfo.Split(new char[] { '.' ,'-'});
foreach (string SpMyInfo in SpMyInfos)
{
Console.WriteLine(SpMyInfo+" ");
}
Console.ReadKey();
运行程序:
csharp
Flyer
Cheng
Man
24
unv_bk
CV_engger
1888888888
6.8 字符串的合并
字符串合并
1、+ 运算符 :使用 +
运算符可以将两个字符串连接起来。
csharp
string str1 = "Hello";
string str2 = "World";
string result = str1 + " " + str2; // "Hello World"
2、string.Concat( ) 方法 :使用 string.Concat( )
方法可以连接多个字符串。
csharp
string str1 = "Hello";
string str2 = "World";
string result = string.Concat(str1, " ", str2); // "Hello World"
3、string.Join( ) 方法 :使用 string.Join( )
方法可以将一个字符串数组或集合中的字符串连接起来,中间使用指定的分隔符。
csharp
string[] words = { "Hello", "World" };
string result = string.Join(" ", words); // "Hello World"
4、StringBuilder 类 :StringBuilder
类提供了高效的字符串操作,特别适用于频繁修改字符串的情况。
csharp
StringBuilder sb = new StringBuilder();
sb.Append("Hello");
sb.Append(" ");
sb.Append("World");
string result = sb.ToString(); // "Hello World"
【示例】
程序代码:
csharp
string str1 = "Hello ";
string str2 = "world ";
string str3 = "C# ";
Console.WriteLine("使用<+>运算符连接:\n{0}\n", str1+str2+str1+str3);
Console.WriteLine("使用<Concat>方法连接:\n{0}\n", string.Concat(str1,str2,str1,str3));
string[] myStrArry = { "My", "name", "is", "flyer" };
Console.WriteLine("使用<Join>方法连接:\n{0}\n", string.Join("**",myStrArry));
Console.ReadKey();
运行程序:
csharp
使用<+>运算符连接:
Hello world Hello C#
使用<Concat>方法连接:
Hello world Hello C#
使用<Join>方法连接:
My**name**is**flyer
6.9 字符串的插入与填充
字符串的插入与填充
插入:Insert
方法
csharp
str1.Insert(n,str2);//n是插入插入字符串str1的位置,str2是插入的内容
填充:PadRight
PadLeft
csharp
str1.PadRight(n,str2);//n是填充后字符串的目标长度,str2是要填充的字符。
str1.PadLeft(n,str2);//n是填充后字符串的目标长度,str2是要填充的字符。
//如果原始字符串的长度已经大于或等于目标长度,这些方法将不会产生任何变化,并返回原始字符串。
1、PadLeft( )
方法:
使用 PadLeft( )
方法在字符串的开头填充指定的字符,使字符串的长度达到指定的长度。
csharp
string str = "Hello";
string paddedStr = str.PadLeft(10, '-');
Console.WriteLine(paddedStr); // 输出 "-----Hello"
2、PadRight( )
方法:
使用 PadRight() 方法在字符串的末尾填充指定的字符,使字符串的长度达到指定的长度。
csharp
string str = "Hello";
string paddedStr = str.PadRight(10, '-');
Console.WriteLine(paddedStr); // 输出 "Hello-----"
【示例】
csharp
//1、字符串插入
Console.WriteLine("1、字符串插入");
string str1 = "www..com";
string website = str1.Insert(4,"baidu");
Console.WriteLine("插入后的网址为:\n{0}", website);
//2、字符串填充
Console.WriteLine("2、字符串填充");
string str2 = "=====table";
string info = str2.PadRight(15, '=');
Console.WriteLine("填充后的字符串为:\n{0}", info);
Console.ReadKey();
运行程序:
csharp
1、字符串插入
插入后的网址为:
www.baidu.com
2、字符串填充
填充后的字符串为:
=====table=====
6.10 字符串的删除
字符串的删除Remove( )
方法:
csharp
str1.Remove(n);//n为str1索引号,删除此索引号后面的所有字符
str1.Remove(n,m);//n为str1索引号,m是删除字符个数,删除n索引号后面的m个字符
1、Remove( )
方法:
使用 Remove() 方法可以从字符串中移除指定索引位置开始的一定数量的字符,返回移除后的新字符串。
csharp
string str = "Hello, World!";
string removedStr = str.Remove(7, 6); // 从索引位置 7 开始,移除 6 个字符
Console.WriteLine(removedStr); // 输出 "Hello!"
2、Substring( )
方法:
使用 Substring() 方法可以获取字符串的一个子串,移除指定的部分。你可以选择保留子串的某一部分或反转切割后的子串。
csharp
string str = "Hello, World!";
string removedStr = str.Substring(0, 7); // 从索引位置 0 开始,截取 7 个字符
Console.WriteLine(removedStr); // 输出 "Hello, "
Remove( )
方法和 Substring( )
方法都返回一个新的字符串,原始字符串本身不会改变。
【示例】
csharp
//3、字符串的移除
Console.WriteLine("//3、字符串的移除");
string webstr = "https://fanyi.baidu.com/?aldtype=16047#zh/en/%E7%BD%91%E5%9D%80%0A%E5%9C%B0%E5%9D%80";
string website = webstr.Remove(23);
Console.WriteLine("<Remove>移除后的字符串:{0}",website);
Console.WriteLine("<Substring>截取后的字符串:{0}", webstr.Substring(0,23));
Console.WriteLine("");
运行程序:
csharp
//3、字符串的移除
<Remove>移除后的字符串:https://fanyi.baidu.com
<Substring>截取后的字符串:https://fanyi.baidu.com