【C#笔记】SIKI的C#高级教程之Part1:字符串类的使用

  跟着SIKI老师的视频做的笔记,

 

  地址:http://www.devsiki.com/


1.System.String类

  • 创建字符串 string s = “www.devsiki.com”;
  • 获取字符串长度 s.Length(属性)
  • 比较字符串是否一样 s==”www.devsiki.com”;
  • 字符串连接 s = “http://” + s;
  • 使用类似索引器的语法来取得字符串中的某个字符stringName[index] s[0] s[3]

*string创建的字符串是不可变的数据类型,一旦对字符串进行了初始化,该字符串就不能再改变内容

Q:用于比较的==和equalse有何不同?

A:string是一种特殊的引用类型,在C#语言中,重载了Object对象的很多方法(包括equals()方法),使string对象用起来就像是值类型一样。

值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。

所以对于值类型,==和equalse等价;而对于值类型之外的引用类型,==比较的为两者的地址(栈),equalse比较的为值(堆)。

2.String里的更多用法

  • CompareTo,相等为0,在字母表排序上,从左往右若被比较字符串的第一位大于本字符第一位,结果为-1,否则为1
  • Replace,可对源字符串的内容进行替换,字符只能用字符替换,字符串只能用字符串替换
  • Split,按照指定字符进行切分
  • SubString,在字符串中检索给定位置的字符串,对源字符串没有影响,表示从索引x开始,截取y个字符串
  • ToUpper大写转换、ToLower小写转换
  • Trim,删去前后的空白(玩家注册用户名时可以用)
  • InedxOf,搜索自定义字符串是否存在,如果在,则返回存在字符串的首字符索引,不存在则返回-1

3. StringBulider

位于System.Tsxt命名空间下,如果没有需要引入。

可以改变字符串类型的长度,适用于频换修改字符串内容的场景

初始化的三种方法:

  • 使用构造函数创建StringBuilder

   StringBuilder sb1 = new StringBuilder("I have an apple?");

  • 初始一个StringBuilder对象,定义它的初始大小

      StringBuilder sb2 = new StringBuilder(20);

  • 结合上两种方法,既有初始内容,又有初始长度,当内容超过规定长度时,进行二倍扩容,原内容仍然存在

   StringBuilder sb3 = new StringBuilder("hello my little apple",100);

4. StringBuilder与String的区别

  • Append,添加字符串,StringBuilder比String效率更高,画了图来加深理解

    sb3.Append("\n——hello my orange");

5.StringBuilder的更多方法

  •  Insert,插入

sb3.Insert(1,"!!!!");

  •  Remove,移除

sb3.Remove(1, 4);

  • Replace,替换

sb3.Replace(" ", "--");

  • ToString,用于把当前StringBuilder中存储的字符串,提取成一个不可变的字符串,返回方法是String类型的

string sb4 = sb3.ToString();

6. Reshapter

  • 可以自动引入命名空间
  • 语句的补全

官方安装步骤:

  • 下载
  • 工具 → 扩展和更新 → (左列表)联机 → (最右侧)搜索栏“resharper” → 找图标是“R#”的 → 弹出网址中下载
  • 选择和C#有关的安装项,接受协议

7.了解了一下正则表达式

8.正则表达式中的元字符

  • 开始符:^

元字符 ^ 表示开始

 string str1 = Regex.Replace(str, "^", "开始 → ");

  • 结束符:$

元字符 $ 表示结束

      string str2 = Regex.Replace(str, "$", " ← 结束");

* Regex.Replace()搜索字符串,把全字符串符合位置的全部替换,对原字符串并没有影响,不产生修改

9.正则表达式判断字符串是否合法

  1. 验证输入字符串是否为数字串
  • 用之前for语句来验证,语句很多
  • 用正则表达式Regex.IsMatch

string pattern = @"^\d*$";//正则表达式。@代表正则表达式,^代表字符串开始,\d代表数字,$代表字符串结束

   isMatch = Regex.IsMatch(ans, pattern);//isMatch中只要有存在符合条件的则返回值,所以必须用 string pattern = @"^\d*$";而不能用 string pattern = @"\d*";\d有0个或多个,输入什么都会返回True了

    Console.WriteLine("字符串用正则表达式判断符合规则吗:"+isMatch);

       2.校验输入:只允许除字母大小写、数字0——9、下划线以外的任何字符输入

            string ans2 = Console.ReadLine();

            string regexStr = @"^\W*$";

            bool isTrue = Regex.IsMatch(ans2, regexStr);

            Console.WriteLine("输入的字符串符合规则吗:"+isTrue);

10.反义字符

替换匹配字符(屏蔽关键字)

  string str3 = "I have a banana";

   string hello = @"[^ahou]";//代表一个除了a,h,o,u的任意一个字符

   string s = Regex.Replace(str3, hello, "*");

   Console.WriteLine(s);

11.重复描述字符

匹配QQ号

 string qq1 = "123456789";

  string IsTrue = @"^\d{5,12}";//表示可以重复5——12次

  Console.WriteLine(Regex.IsMatch(qq1,IsTrue));

 12.  择一匹配符

  • 过滤字符,过滤掉汉字字符

   string str4 = "my English那位内i嗯我i你问 234 ibib就那么";

   string pattern1 = @"\d|[a-z]";//数字或者是a-z字母

       MatchCollection col = Regex.Matches(str4, pattern1);      foreach (Match temp in col)

         {

            Console.WriteLine(temp);

    }

  • 以指定字符分割字符串

     string str5 = "zhangsan,lisi.wangwu;zhaoliu";

 string pattern2 = @"[,.;]";//以指定的,.;三者中任意一个字符分割,string pattern2 = @"[,][.][;]";也可以

     string[] resArray = Regex.Split(str5, pattern2);        foreach (var temp in resArray)

      {

       Console.WriteLine(temp);

       }

13.对正则表达式进行分组

  • 用小括号进行分组

string str6 = "asdffg123abhjabhjbbbbbbbababab11";

   string pattern6 = @"(ab\w{2}){2}";//== ab\w\wab\w\w

Console.WriteLine(Regex.Replace(str6,pattern6,"******"));

  • 校验IP4地址。共四位,用.来间隔,每一位取值范围为0——255。

以20-24开头,则以0-9结尾;以25开头,则以0-5结尾;以0-1为百位,0-9为十位,0-9为个位

   string str7 = "123.12.12.121";

     String pattern7 = @"^(((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?))$";

    Console.WriteLine("这串IP地址符合规则吗:"+Regex.IsMatch(str7,pattern7));

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值