学习了一点C#语法知识(string和StringBuilder的区别,正则表达式等)记录一下

       今天学习了一部分C#中的字符串知识和一些正则表达式的知识,感觉不是很难,在此分享一下,如有不足之处,欢迎各位大佬批评指正。

        首先写一下,string和StringBuilder的一些区别。

        string s="CSDN";这里面s是一个定义好的字符串变量,不能更改,因为字符串"CSDN"是一个已经存储在内存堆上的一个数据了,而s只是一个存在栈上的变量,通过调用变量s来指向堆上的那块数据。如果我们使用s="ABC"+s;这个语句,相当于在内存堆上重新建立了一个存储空间,将字符串"CSDN"拷贝到新空间并为其添加"ABC"字符串,然后将s变量的指向指到新开辟的堆内存上,而以前建立的“CSDN”字符串还存在于堆内存中,等待系统的垃圾回收程序将其销毁。

        而StringBuilder建立的变量,是可以进行改变的。首先,我们定义一个StringBuilder str=new StringBuilder("www.CSDN.com", 50);这里我们发现,StringBuilder是一个类的变量,我们需要使用new的构造函数为其进行初始化。而在初始化时,我们可以去定义它的初始值,和最大值。另外在对变量str进行改变时,我们需要使用str.Append()函数,通过这个方法,可以将()内的字符串添加到原有的str字符串后面。而这个过程不同于string类的地方在于,他不需要重新建立一块存储空间,只需要在构造str时,创建的空间中直接添加()中的字符即可(当然,创建的空间要足够大,可以放下()中的字符串)。

          通过上述过程我们发现,在进行添加字符串函数的过程中,StringBuilder类要比string类更有效率一点。另外,string只不过是System.String的别名,他同样也是个类。

            下面记录一下,关于正则表达式的一些心得。

            正则表达式是非常常用的一个检测字符串是否匹配的方法。其中定义了一些常用的字符。例如"^"符号,代表字符串的开头,"$"符号代表字符串的结尾,\d代表匹配数字[0-9],"*"代表匹配上一个元素零次或多次,“+“则代表匹配上一个元素一次。"{n}"代表匹配上一个元素n次,而"{n,m}"则代表匹配上一个元素n到m次。说到这,肯定大部分人都懵逼了,下面我写一些简单的例子,希望能帮助大家理解。

例子1:

string s = Console.ReadLine();//读取用户输入的一行字符串

string pattern = @"^\d*$";//然后我们定义一个正则表达式,在该字符串前加一个"@"就是告诉编译器,这些特殊字符是作为字符串中的一部分存在的,编译器就不会去编译它了。字符串当然要用""括起来。^表示开头要匹配他后面的\d(也就是数字[0-9]),中间的*是告诉表达式,可以匹配0个或者多个。而最后用"$"符号结尾,则说明最后也要匹配\d。

bool isMatch = Regex.IsMatch(s, pattern);//然后我们使用IsMatch方法来判定是否匹配,返回一个bool值

Console.WriteLine(isMatch);//最后输出一下结果,如果相同返回true,不同就是false;

由上面的例子,我们大致了解了正则表达式的用法,那如何限定我想要限定的特殊字符呢?下面我们讲另一个例子:

例子2:

string str = "abcdefghijklmnopqrstuvwxyz.";//定义一个字符串,直接使用26个字母吧

string pattern = @"[abc]";//这句话的意思是他匹配中括号中的任意一个字符,就是其中的abc三个字母,每一个他都可以匹配为真

string s=Regex.Replace(str, pattern, "*");//我们使用替换函数Replace,将匹配的字符使用*代替。

Console.WriteLine(s);//输出结果

我们发现字符串中的abc都被替换了。中括号表示其中任意一个符号匹配成功,都算匹配成功

下面,我们将正则表达式改为

string pattern =@"[a-e]";

则输出结果为:

我们发现a到e都被替换了,那么表达式[a-e]就是代表a到e之间所有的字符都匹配这个表达式。

最后,我们将正则表达式改为

string pattern =@"[^a-e]";

则输出结果为:

我们发现除了abcde以外,其它字母全部都被替换了。也就是说符号"^"在这里还有另外一个取反的意思。

最后我们再举例子说明一下大括号{}和逻辑运算符|在正则表达式中的用法。

例子3:

string s = Console.ReadLine();//我们手动输入一行数字

string pattern = @"^\d{5,12}$";通过正则表达式来判断他是不是一个合格的QQ号,其中{5,12}代表最小QQ号的位数,和最大QQ号的位数,我们需要正则表达式循环匹配5-12次,所以我们将次数使用{}限制出来;

bool isMatch = Regex.IsMatch(s, pattern);

 Console.WriteLine(isMatch);

我分别输入了3次,大家可以发现,无论我是输入的数字长度超出范围或者输入的字符中包含字母,都无法使正则表达式为真。只有输入的数字完全符合我们的限制条件时,返回的结果才为真。

例子4:

string s = "zhangsan;lisi,wangwu.zhaoliu";//定义一组使用不同符号分割开的人名字符串

string pattern = @"[;]|[,]|[.]";//分别使用"|"运算符,将判定条件使用逻辑语言与(and);

string[] resArray = Regex.Split(s, pattern);//将分割完成的字符串使用一个字符串数组存储。

foreach (var s1 in resArray)//使用foreach函数遍历数组元素。
            {
                Console.WriteLine(s1);
            }

输出结果为:

大家发现,我们已经根据不同的符号将每个字符串分割开了。

以上就是我学习C#字符串过程中的一点心得和体会,希望与大家分享,共同进步!同时也欢迎大佬来给我等小白,指出错误和不足之处。每个网友的评论都是我前进道路上的动力!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值