C#中字符串的特性:
1、C#中字符串的长度就是我们看到的长度,这点和C语言不同,不需要考虑最后的’\0’
2、一切类型都可以调用.ToString()方法转换成字符串类型
3、字符串的不可变性,在内存中,字符串一旦生成,将不会改变
1、字符串的定义
语法:
string <name>;
<name>=<value>;
或
string <name>=<value>;
字符串是引用类型,在定义string <name>;的时候,在栈空间中,定义了一个<name>的空间,该空间存放一个地址
当写到
<name>="Hello World!";
的时候,会在堆内分配一个空间,存放字符串" Hello World!",并将首地址赋值给<name>,因此<name>指向定义的
字符串
这里就要提到字符串的不可变性,在内存中,字符串一旦生成,将不会改变
如果一定要更改字符串中的某个字符,可以使用.ToCharArry()方法
此方法将字符串复制一份,然后变成一个字符数组,这样就可以更改了
之后再使用构造函数生成字符串就可以了,当然,后生成的和之前的那个是不同的两个字符串
string str = "Hello World!";
char[] ch = str.ToCharArray();
ch[0]='k';
str=new string(ch);
2、字符串可以用索引访问
字符串,原本就是排在一起的字符,C#提供了用“下标”(索引)来访问字符串中的字符
例如:
string str="jiangjun";
这里内存中将"j"分配编号0,"i"分配编号1,然后依次增加。。。。
因此,如果需要访问u,数一数,编号是6,所以可以这么来
char temp=str[6];
那么得到的就是字符"u",字符串也有一个Length属性,可以得到字符串的长度
3、字符串处理常用方法
3.1字符串大小写(字符)
string <strName>.ToUpper();
string <strName>.ToLower();
例:在等待用户输入的时候,常常不考虑用户输入的用户名大小(或一个程序中规定使用的大小写)
可以将用户的输入全部转换成小写,或大写再来进行比较
如:
Console.WriteLine("请输入用户名:");
string uid=Console.ReadLine().ToLower();
3.2 移除首尾指定字符
方法原型
string <strName>.Trim(); //移除首尾的空格
string <strName>.TrimStart(); //移除开头的空格
string <strName>.TrimEnd(); //移除结尾的空格
如果要指定移除的内容,可添加一个char数组作为参数
string <strName>.Trim(char[] ch);
//实际操作中,对Char[]中的字符顺序没有关系
例:在用户输入的时候,一般不考虑输入两边的空格,而使用Trim()方法
3.3 字符串的比较
Compare()方法
方法原型
int string.Compare(string str1,string str2);
按照字典排序比较
当str1>str2时,返回1
当str1=str2时,返回0
当str1<str2时,返回-1
注:int string.Compare(string str1,string str2,bool ignoreCase);表示是否区分大小写
这里true表示不区分大小写,默认为false
Equals()方法
方法原型
bool <strName>.Equals(string str) ;
比较如果相等返回true,否则返回false
注:bool <strName>.Equals(string str,StringComparison.OrdinalIgnoreCase)表示不区分大小写
注:如果仅仅比较两个字符串是否相等,还是使用“==”比较简单
例如:
Console.WriteLine("请输入一个字符串");
string str1=Console.ReadLine();
Console.WriteLine("请输入第二个字符串");
string str2=Console.ReadLine();
//不考虑大小写的比较
bool isEqual=(str1.ToLower() == str2.ToLower());//运算符的优先级可以不记住,使用()解决问题,这样阅读很方 便
3.4 字符串的合并与分割
合并Join方法
将数组strArr中的内容拼接成一个字符串,并在对应数组的每两项间添加分隔符str
string.Join(str,strArr);
字符串分割的Split()方法
方法原型
string[] <strName>.Split(params char[] separator);
将字符串<strName> 以separator数组中的字符分割。分割后得到的内容存到一个数组中
string s1 = "aaa,df.dfdf|dfji ";
string[] strs = s1.Split(',','.','|');
foreach (string item in strs)
{
Console.WriteLine(item);
}
输出结果:
aaa
df
dfdf
dfji
注:返回的数组中可以有空字符串项,如果要去掉这些空字符串,可以使用
string Split(char[] separator,StringSplitOptions options)将字符串按照指定的char分隔符分割为字符串数组
(options取RemoveEmptyEntires的时候移除结果中的空白字符串)
string s = "aa,bb,cc,,dd,1,2,3";
string []strs=s.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
当然,此处的char[]{','}中的分隔符可以不止一个。
如果是以字符串分割的,那么就用new string[]{“字符串”}
string s = "我是小明我是小天我是小刚";
string[]strs=s.Split(news tring[]{"我是"},StringSplitOptions.RemoveEmptyEntries);
3.5 字符串查找
Contains方法
方法原型
bool <strName>.Contains(string str);
表示字符串<strName>中是否包含str,如果包含,返回true,否则返回false
IndexOf方法
常用的两种形式
int <strName>.IndexOf(string str); //从头开始,str出现第一次的下标
int <strName>.IndexOf(string str,int startIndex); //从startIndex开始,出现第一次的下标
如果没有找到则返回-1
例:
string str="我爱你中国";
int res1=str.IndexOf("中国");
int res2=str.IndexOf("中 国"); //将找不到
Console.WriteLine(res1+"\n"+res2);
注:LaseIndexOf方法从最后一个开始匹配
3.6 求子字符串
方法原型
string <strName>.Substring(int startindex,int Length);
从字符串<strName>的startIndex位置开始提取长度为length的字符串,如果省略第二个参数表示一直到最后
string s = "http://www.baidu.com";
string s1 = s.Substring(7);
string s2 = s.Substring(7, 3);
Console.WriteLine(s1);//结果为www.baidu.com
Console.WriteLine(s2);//结果为www
3.7 字符串的插入、移除和替换
3.7.1 插入
在字符串<strName>的index位置上插入str,原来的字符依次后移,变成一个新的字符串
<strName>=<strName>.Insert(index , str);
方法原型为:
string <strName>.Insert(int index , string str);
3.7.2 移除
在字符串<strName>中移除从startIndex开始,长度为length的字符串,剩下的字符按原序合并为一个新的 字符串
<strName>=<strName>.Remove(startIndex,length);
方法原型:
string <strName>.Remove(int startIndex,int length);
注:如果省略第二个参数,将移除startIndex后面的所有字符串
3.7.3 替换
将字符串<strName>中的oldChar替换为newChar
<strName>=<strName>.Replace(oldChar,newChar);
方法原型:
string <strName>.Replace(char oldChar, char newChar);
同样,这个替换的字符也可以是字符串
string <strName>.Replace(string oldValue,string newValue);
3.8 判断结束与开始
判断字符<strName>串是否以某字符串开始或结束
bool <strName>.Startswith(string str);
bool <strName>.EndsWith(string str);
再次注意:字符串具有不可变性,对字符串的修改,实际上都是重新得到一个字符串,重新赋值