C#基础------字符串、字符串API。可变字符串
字符串是 System.String 类的实例。字符串表示文本数据,可以包含字母、数字、符号和空格等字符。
创建字符串
csharp
string str1 = "Hello, World!"; // 使用双引号创建字符串
string str2 = "This is a C# string.";
字符串拼接
csharp
string concatenated = str1 + " " + str2; // 使用 + 运算符连接字符串
string interpolated = $"{str1} {str2}"; // 使用字符串插值方式连接字符串
占位符
csharp
int i = 12345;
Console.WriteLine("{0:C}", i); //货币占位符
Console.WriteLine("{0:D}", DateTime.Now); //日期占位符(年/月/日)
Console.WriteLine("{0:y}", DateTime.Now); //日期占位符(年/月)
使用字符数组对字符串进行初始化
csharp
char[] charArray = { 't', 'i', 'm', 'e' };
string charStr = new string(charArray);
Console.WriteLine(charStr); //time
字符串长度 Length
csharp
string charStr = "time";
// 使用 Length 属性获取字符串的长度
Console.WriteLine(charStr.Length); //4
// 使用索引获取指定位数的字符(可以把字符串当作是一个 "数组")
Console.WriteLine(charStr[3]); //m
字符串API
csharp
// IndexOf 获取指定字符在字符串中的位置(索引)
Console.WriteLine(charStr.IndexOf('e'));//3
// 第二个参数代表要查找字符开始的位置(有多个的相同字符的时候使用第二个参数)
Console.WriteLine(charStr.IndexOf('e', 4)); //-1
// LastIndexOf 从后往前查
Console.WriteLine(charStr.IndexOf('e')); //3
// 判断字符串首位内容
string str2 = "梦想还是要有的,万一实现了呢!";
// StartsWith 判断以xxx开头,返回一个布尔值
Console.WriteLine(str2.StartsWith("梦想")); //true
Console.WriteLine(str2.StartsWith("叽里呱啦")); //false
// EndsWith 判断以xxx结尾
Console.WriteLine(str2.EndsWith("!")); //true
Console.WriteLine(str2.EndsWith("叽里呱啦")); //false
// Contains 是否包含某一部分
Console.WriteLine(str2.Contains("梦想")); //true
Console.WriteLine(str2.Contains("叽里呱啦")); //true
IsNullOrEmpty 判断是不是空字符
csharp
// 判断是不是空字符串 null
string str3 = ""; //这个不是空字符串,是占内存的,属于内容是空的
str3 = null; //这个是空字符串,压根没有内存
// IsNullOrEmpty 判断指定字符是不是空的,返回布尔值
Console.WriteLine(string.IsNullOrEmpty("--" + str3)); //false
//字符串中代表空的方式有多种
string c1 = ""; //有内存,无内容
string c2 = null; //无内存
string c3 = string.Empty; //等价于 c1
// 值类型有默认值所以不能直接为null
// int number = null; //报错!
Equals 比较两个字符串的值是否相等,返回一个布尔值
csharp
string a = "hello", b = "world";
Console.WriteLine(a.Equals(b)); //false
Console.WriteLine(a == b); //false
ToUpper ToLower 大小写转换
csharp
string str4 = "Learn And Live";
// 大小写转换
Console.WriteLine(str4.ToUpper()); //转为大写
Console.WriteLine(str4.ToLower()); //转为小写
Substring 截取字符串
第一个参数是:开始的索引(包含)
第二个参数是:截取字符串的位数
csharp
string str4 = "Learn And Live";
Console.WriteLine(str4.Substring(1, 3));
Split 分割字符串
第一个参数代表分隔符(需要一个char类型的数组)
第二个参数代表分割的结果以 xx 形式呈现
StringSplitOptions.RemoveEmptyEntries 除空字符串(如果不写第二个参数,默认是None)
csharp
string str5 = "关注博主,,一起打好C#基础,学好编程语言,做一个不脱发的程序猿";
char[] separator = { ',' }; // 声明分割的字符串数组
string[] splitStr = str5.Split(separator, StringSplitOptions.RemoveEmptyEntries);
foreach (var item in splitStr) {
Console.WriteLine(item);
}
去除空格
csharp
string str6 = " 123 456 ";
// Trim 去除字符串前后空格
Console.WriteLine("<<<" + str6.Trim() + ">>>"); // "123 456"
// TrimStart 去除字符串开头空格
Console.WriteLine("<<<" + str6.TrimStart() + ">>>"); // "123 456 "
// TrimEnd 去除字符串结尾空格
Console.WriteLine("<<<" + str6.TrimEnd() + ">>>"); // " 123 456"
Replace 替换字符串
第一个参数是需要替换的字符,第二个参数是要替换成为的字符
csharp
string a2 = "5", b2 = "10";
Console.WriteLine(a2.Replace(a2, b2)); //10
可变字符串
频繁使用字符串进行拼接的时候意味着要产生多个连续不断的内容,这样会降低程序的效率,解决方案是使用可变字符串。
可变字符串可以使用StringBuilder类来实现。这个类允许我们对字符串进行动态操作,而不必每次更改字符串时都重新创建一个新的字符串对象。
csharp
StringBuilder ss = new StringBuilder();
Append 添加字符串到StringBuilder对象,通过往同一块内存中追加避免产生多余的垃圾内存。
csharp
ss.Append("a");
ss.Append("b");
ss.Append("c");
Console.WriteLine(ss); //abc
Insert 在指定的位置插入
第一个参数是要插入的位置(索引),
第二个参数是插入的内容
第三个参数是要插入多少次
csharp
ss.Insert(0, "xxx", 3);
Console.WriteLine(ss); //xxxxxxxxxabc
Replace 替换字符串
第一个参数是要替换的内容
第二个参数是要替换后的内容
csharp
ss.Replace("x", "a");
Console.WriteLine(ss);//aaaaaaaaaabc
Remove 删除字符串
第一个参数起始索引
第二个参数是删除的个数
csharp
ss.Remove(0, 9);
Console.WriteLine(ss); //abc
ToString 可变字符换也可以直接转成不可变字符串
csharp
Console.WriteLine(ss.ToString()); //abc
对于不可变字符串,Length只能读,不能改
csharp
ss.ToString().Length = 7; //报错
对于可变字符串,Length属性读写都可以
csharp
ss.Length = 7;
注意:由于StringBuilder对象是可变的,所以我们可以在任何时候添加、插入、替换或删除字符串。一旦完成操作,我们可以使用ToString()方法获取StringBuilder对象的不可变字符串表示形式。