[特点]
1.可以看作是一个只读的char数组
2.不可变性,即字符串中的字符内容不能改,,当重新给改变量赋值时,知识变量的指向改变了,但可以读。如果我 想”改变“字符串中字符的内容,怎么办那?(实际上原字符串的内容没有改变)
解决方案:利用char数组进行修改
1>把字符串变成字符数组,toCharArray()举例:
string text = "我又漂亮了"; char[] chs = text.ToCharArray(); chs[1]='很'; text=new string(chs); Console.WriteLine(text); Console.ReadKey();
[有关字符串的操作]
字符串的方法分为静态方法和非静态方法,当方法是静态方法时,方法前应加String,即格式为String.方法名(7,8都是静态方法)
1.Upper,Lower,Equals的用法
Upper:将字母转化为大写
Lower:将字母转化为小写
Equals:忽略字母的大小写
Console.WriteLine("请输入字符串"); string str1 = Console.ReadLine(); str1 = str1.ToUpper(); Console.WriteLine("请输入字符串"); string str2 = Console.ReadLine(); str2 = str2.ToUpper(); //转化成大写 bool result = str1.Equals(str2, StringComparison.OrdinalIgnoreCase); if (result) { Console.WriteLine("输入意思相同"); } else { Console.WriteLine("输入意思不同"); } Console.ReadKey();
2.Split:分割字符串
Replace:替换某个字符串
Countain:判断某字符串中是否包含某字符串
string text = "好好玩耍,天天快乐"; bool result = text.Contains("好好玩耍"); if (result) { string[] str = text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (str[0].Contains("好好玩耍")) { str[0].Replace("玩耍", "学习"); } Console.WriteLine("{0},{1}", str[0], str[1]); } else { Console.WriteLine(text); } Console.ReadKey();
3.StartWith、EndWith的用法
判断某个字符串是否以某个字符串开始(startwith)或以某个字符串结束(endwith)
string text = "天气真清新"; bool result = text.EndsWith("清新"); if (result) { Console.WriteLine("是的"); } else { Console.WriteLine("不是"); } Console.ReadKey();
4.indexof 的用法:判断某个字符在字符串中的索引,可以从同开始找,也可以从某个索引开始找,如果没有该字符, 则返回-1,有则返回该字符在该字符串中的索引
查找该字符的最后一个索引,用LastIdexOf
int index = path.IndexOf("练习", 25);
5.substring的用法:截取字符串中的一段字符
string path = @"C:\Users\SHUANG\Desktop\练习.txt"; int order = path.LastIndexOf("\\"); string name = path.Substring(order + 1); Console.WriteLine("文件名为:{0}", name); Console.ReadKey();
6.insert的用法:在字符串的某个索引前插入值
string text = "我是一名学生"; text = text.Insert(4, "好"); Console.WriteLine(text); Console.ReadKey();
运行结果为:我是一名好学生
7.strign,join的用法
string[] text = { "火龙果", "香蕉", "苹果", "芒果" }; Console.WriteLine(string.Join("|", text)); Console.ReadKey();
运行结果为:火龙果|香蕉|苹果|芒果
insert与join的区别:join是在字符串数组的前提下操作的,在每个数组元素中间插入内容,而inset是对字符串操 作, 在某个索引前插入内容;
8.string.IsNullOrEmpty() 的用法:判断该字符串是否为空后NULL
string text = null; bool result = string.IsNullOrEmpty(text); if (result) { Console.WriteLine("没信息"); } else { Console.WriteLine("有信息"); } Console.ReadKey();
NULL与" "空字符串的区别:
NULL:不分配内存,无对象
“ ”:分配内存空间,有对象
9.Trim的用法
Trim是去掉字符串两端的空格
TrimEnd是去掉字符串最后面的空格
TrimStart是去掉字符串最前面的空格
string text = " 好天气 "; text = text.Trim();
10.Format 的用法
Console.WriteLine(string.Format("{0:0.00}", 352435.345435));
运行结构为:352435.35
Format的用法还有待研究:这是我发现写的不错的一篇有关Format使用方法的介绍:
http://www.jb51.net/article/57216.htm
string path = @"C:\Users\SHUANG\Desktop\练习.txt"; string[]text=File.ReadAllLines(path,Encoding.Default); for (int i = 0; i < text.Length; i++) { string[] str = text[i].Split(new char[] { ' '}, StringSplitOptions.RemoveEmptyEntries); Console.WriteLine(str[0].Length > 8 ? (str[0].Substring(0, 8) + "...|" + str[1]) : (str[0] + "|" + str[1])); } Console.ReadKey();
[注意]
可以发现上面所有的方法都不可避免的会声明string字符串变量,在大数据下或对一个string变量不断更改时,最好不用string类型,为什么?
String的工作原理:一旦被运算,就会产生一个实例,在.NET中,在修改字符串时,会把两个字符串写入内容中,然后删除先前的是string对象,然后重新声明一个string对象,然后从内存中读取字符串,再赋给string变量
StringBuild的工作原理:在C#中的System.Text中,是在原来的string对象上直接修改字符串
相比之下:在面对大数据时,用StringBuild会比用String节省很多时间