[C#基础知识系列]专题六:C#字符串操作总结

C#字符串操作总结

1、字符串的一些特性:

(1)不可变性:字符串是引用类型,当给字符串赋值时,会在堆中开辟一块空间来存放字符串,在栈中存放字符串在堆中的地址。(如下图所示)


(2)字符串池(针对字符串常量)

当程序中有多个相同的字符串常量时,这时,这些字符串都是指向内存中的同一个字符串,这个特性叫做:字符串池。之所以字符串池不会造成程序的混乱,是因为:字符串具有不可变性。


(3)字符串留用(*用的少)(Intern)。

   string s1 = "a";
   string s2 = "b";
   string s3 = "c";
   string s4 = s1+s2+s3;
   string s5 = s1+s2+s3;

//虽然s4和s5这两个字符串中的内容一样,但是在内存中是两块内存。

   string x1="a";
   string x2="bc";
   string s4=string.intern(s1+s2+s3);
   string s5=string.IsInterned(x1+x2);


//这个时候,s4和s5在堆中的地址就是一样的。(字符串留用)


String字符串:

属性:

•    Length//获取字符串的个数(无论中文字符还是英文字符都是一个char即一个字符

方法:

•    IsNullOrEmpty()      静态方法,判断为null或者为””

•    ToCharArray() 将string转换为char[]

•    ToLower()        小写,必须接收返回值。(因为:字符串的不可变);

•    ToUpper()      大写。

•    Equals()      比较两个字符串是否相同。  忽略大小写的比较,StringComparation.

•    IndexOf() 如果没有找到对应的数据,返回-1.找到则返回出现的位置

•    LastIndexOf() 如果没有找到对应的数据,返回-1,返回最后出现的位置

•    Substring()      //2个重载,截取字符串。

•    Split()   //分割字符串。              

•    Join()                 静态方法  把字符串用指定的符号链接

•    Format    ()       静态方法  通过占位符莱拼接字符串

•    Replace()         s   //用途:微博中敏感词替换

•    Trim()  去掉字符串两边的空格

1、  空字符串的表示及判断:

(1)空字符串的表示:

string s = "";

string s = string.Empty;两个是一样的意思

string.Empty内部是一个静态只读的字符串,程序中共享一个内存,由于具有字符串池的概念,所以写多个它也会指向同一个内存,所以它与"" 一样

(2)空字符串的判断:

判断字符串为空可以用msg=="",也可以用msg.Length==0(字符串长度为0,表示字符串为空)所以以后对字符串进行是否为空的判断时候,就用msg.Length ?=0来判断。

通过反编译工具,看到微软内部实现IsNullOrEmpty的方法,很值得学习!!!

public static bool IsNullOrEmpty(string value)
{
    if (value != null)
    {
        return (value.Length == 0);
    }
    return true;
}


2、将字符串转换为字符数组再进行修改操作:

因为字符串是不可变的,并且在字符串的索引器中也只实现了一个只读的所引器(只有get),所以不能直接修改字符串中的内容但可以将字符串转换成char数组,然后再对其进行修改

3、判断字符串是否相等:

比较两个字符串是否相等可以用s1==s2也可以用s1.Equals(s2,StringComparison.OrdinalIgnoreCase)忽略大小写比较

//通过反编译工具可以看到,虽然使用的等号进行判断,但微软在内部还是调用的Equals(运算符重载)

public static bool operator ==(string a, string b)
{
    return Equals(a, b);
}


4、字符串分割方法:(几乎是万能的方法了,推荐给大家)

         (1)引用命名空间:System.Text.RegularExpressions

       (2)定义分割方式:stringpattern = " ";(万能分割方式:string pattern = @"\s*,\s*|\s+";)

       (3)开始分割:Regex.Split(s,pattern)

5、StringBuilder:



注意:

(1)      StringBuilder 不等于 String,将StringBuilder转换为String.用ToString();

(2)      StringBuilder仅仅是拼接字符串的工具,大多数情况下还需要把StringBuilder转换为String。

(3)      StringBuilder sb = newStringBuilder();

sb.Append();//追加字符串

sb.ToString();//把StringBuilder转换为字符串。

sb.Insert();

sb.Replace();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值