【C#基础知识点】——字符串(String)

字符串的不可变性

  • 字符串的不可变性

在内存中当你给一个字符串重新赋值之后,原先的值并没有销毁,而是重新开辟一块空间存储新值。
当程序结束后,GC(垃圾回收机制)扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁。

string

在这里内存中发生了什么?
在堆内存中“张三并没有被销毁”,而是重新开辟了一块空间存储“李四”,name 的引用不再指向“张三”,而是指向了“李四”;当程序结束后,GC会销毁“张三”。



字符串方法 ##

  • 可以将 string 看做是 char 类型的一个只读数组,所以可以通过下标去访问字符串中的某一个元素。
1 . ToCharArray();

方法可以将字符串转为 Char 类型数组。

这里写图片描述


2 . Length

获得当前字符串中字符的个数。

  string str = "高山博客:http://blog.csdn.net/joinl";
  // 下标访问单个字符、
  Console.WriteLine(str[0]);
  // 获取当前字符串长度、
  Console.WriteLine(str.Length);

输出结果:
Length


3 . ToUpper()

将字符串转换成大写形式。

 string str = "高山博客:http://blog.csdn.net/joinl";
 str = str.ToUpper();
 Console.WriteLine(str);

输出结果:
ToUpper


4. ToLower()

将字符串转换成小写形式。

string str = "高山博客:HTTP://BLOG.CSDN.NET/JOINL";
str = str.ToLower();
Console.WriteLine(str);

输出结果:
ToLower


5. Equals( string value,StringComparison.OrdinalIgnoreCase)

比较两个字符串,参数 StringComparison.OrdinalIgnoreCase 可以忽略大小写。StringComparison 是枚举。


Console.WriteLine("请输出你喜欢的博主网");
string str1 = Console.ReadLine();
Console.WriteLine("请输入你喜欢的博主网");
string str2 = Console.ReadLine();
// Equals(string value,StringComparison comparisonType);
if (str1.Equals(str2,StringComparison.OrdinalIgnoreCase))
{
    Console.WriteLine("你们喜欢的相同");
}
else
{
    Console.WriteLine("你们喜欢的不同");
}

输出结果:
Equals


6. Split()

分割字符串,返回的是字符串类型的数组。

string str = "高山博客:http://blog.csdn.net/joinl";

// Split(); 分割字符串 6 个重载、 返回的是 字符串数组、
char[] ch = { '高','山','博','客'};
string[] s = str.Split(ch);            
Console.WriteLine(s.Length);

for (int i = 0; i < s.Length; i++)
{
    Console.WriteLine(s[i]);
}

输出结果:
split
这里注意一下,我们看到输出结果中有几个空行是为什么呢?
我们设个断点调试一下。调试结果:
Debug

结果中我们可以看出 字符串数组 s 中并不是把分割的字符给删除掉,而是变成了 Null 。这并不是我们要的结果,该怎么解决呢,可以使用第二个参数改为:

string[] s = str.Split(ch,StringSplitOptions.RemoveEmptyEntries);

运行结果:

StringSplitOptions 是枚举类型,RemoveEmptyEntries 表示返回值不包含空字符串的字符元素。
更多重载自己试,Split(); 也可以传入字符串分割。


7. Contains(string value);

返回一个 bool 判断字符串中是否包含有 字符串 value 。

8 . Replace(string oldValue, string newValue);

将字符串中出现 字符串 oldValue 的地方替换为字符串 newVlaue。

//Contains(string value) 
//返回一个 bool 类型判断 value 该值是否出现在字符串中

//Replace(string oldValue,string newValue); 
//将字符串中的 oldValue 替换为 newValue  
string str = "高山最丑";
if (str.Contains("丑"))
{
    str = str.Replace("丑", "帅");
}
Console.WriteLine(str);

运行结果:
这里写图片描述


9. Substring(int startlndexx, int length);

截取字符串,从指定的索引开始截取,到具体指定的长度。2个重载。(包含开始的索引)

// Substring()  截取字符串,从指定的索引截取、        
string str = "高山博客:http://blog.csdn.net/joinl";
// 不指定长度,默认到字符串尾、
str = str.Substring(5);
Console.WriteLine(str);

运行结果:
截取


10. StartsWith(string value);

判断字符串是否以字符串 value 开始。返回 bool 值。

11.EndsWith(string value);

判断字符串是否以字符串 value 结束。
返回 bool 值。

 // StartsWith(string value) 判断字符串是否以字符串 value 开始。
 // EndsWith(string value) 判断字符串是否以字符串 value 结束。

 string str = "高山博客:http://blog.csdn.net/joinl";
 if (str.StartsWith("高山博客"))
 {
     Console.WriteLine("是以高山博客为开始");
 }
 else
 {
     Console.WriteLine("不是的");
 }
 if (str.EndsWith("http://blog.csdn.net/joinl"))
 {
     Console.WriteLine("是以http://blog.csdn.net/joinl网址为结束");
 }
 else
 {
     Console.WriteLine("不是的");
 }

运行结果:


12. IndexOf(string value);

取字符串 value 第一次出现的位置。返回 int 类型,没有找到则返回 -1。(9个重载)

// IndexOf(string value); 查找字符中 value 第一次出现的位置、返回 int类型,没有则返回 -1.
string str = "高山,高山";
int index = str.IndexOf("高");
Console.WriteLine(index);

运行结果:
这里写图片描述

// 下段代码使从索引 1 开始查找
int index = str.IndexOf("高",1);

13.LastIndexOf(string value);

查找字符串 value 最后一次出现的位置、 返回 int 类型, 没有则返回 -1。(9个重载)

// LastIndexOf(string value);查找字符串 value 最后一次出现的位置、返回 int  类型,没有则返回  -1.
string str = "高山,高山";
int index = str.LastIndexOf("高");
Console.WriteLine(index);

运行结果:
这里写图片描述


14.join();

连接成一个字符串,串联对象数组的各个元素,其中在每个元素之间使用指定的分隔符。(静态的。join()可以合并任何类型)

// string.Join(); 串联对象数组的各个元素,其中在每个元素之间使用指定的分隔符
string[] str = { "http", "://", "blog.csdn.net", "/joinl" };
// 以 "," 号作为分割符号将一个字符串数组连接成一个字符串
string s = string.Join(",", str);
Console.WriteLine(s);

运行结果:
这里写图片描述


15.string.Concat();

string.Concat(); 连接成一个字符串。

string[] str = { "http", "://", "blog.csdn.net", "/joinl" };
// 将一个字符串数组连接成一个字符串
string s = string.Concat(str);
Console.WriteLine(s);

运行结果:
这里写图片描述


16.PadLeft();

左侧填充对齐、

17.PadRight();

右侧填充对齐、

string str = "高山";
string  s = str.PadRight(5,'/');
string str2 = "柳氺";
string s1 = str2.PadLeft(5, '/');
Console.WriteLine(s);
Console.WriteLine(s1);

运行结果:
这里写图片描述


18.Trim();

移除当前对象前面和后面的空字符(截头去尾)

19.TrimEnd();

移除字符串尾部空格

20.TrimStart();

移除字符串头部空格
(可以填参数,指定字符移除)


 // 移除当前对象前面和后面的空字符(截头去尾)
 string str1 = "  高山         ";
 string s1 = str1.Trim();
 // 移除字符串尾部空格
 string str2 = "  高山         ";
 string s2 = str2.TrimEnd();
 // 移除字符串头部空格
 string str3 = "  高山         ";
 string s3 = str3.TrimStart();

 Console.Write(s1);
 Console.Write(s2);
 Console.Write(s3);
 Console.ReadKey();

这里写图片描述


21. isNullOrEmpty();

判断字符串是否为 null。

string str = null;
if(string.IsNullOrEmpty(str))
{
    Console.WriteLine("是的");
}
else
{
    Console.WriteLine("不是");
}

运行结果:
这里写图片描述


知识点

  • string 的缺点就是每次字符串变量的内容发生改变时,都必须在内存中创建一个新的字符串对象,需要为该对象分配新的内存空间。如果大量操作是对性能影响非常大。如何要修改字符串而不创建新的对象,可以使用 StringBuilder 类。
  • 字符串是引用类型。字符串的数据是存储在堆空间,在栈空间中存储了该数据的引用地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值