跟着SIKI老师的视频做的笔记,之前的初级和中级没有记录很遗憾QAQ才不是因为懒得做呢,因为学过的知识想复习的话还是看笔记最方便了吧,毕竟学的东西越来越多了。
序号为视频编号,小圆点为视频知识点。一开始写在Word里复制过来改了好久格式...这里做的笔记只为本人复习用,如果不合适立刻删除!
SIKI老师的讲课思路十分清晰,口音正,声音又好听?!!!,感觉是很会站在自学者的角度讲问题的,非常非常好了。
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.正则表达式判断字符串是否合法
- 验证输入字符串是否为数字串
- 用之前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));