CS3L24——string

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
string[]                    //通过索引可以获取字符串特定位置字符
string.ToCharArray() //将字符串转换为字符数组
string.Format() //字符串拼接(格式化)
string.IndexOf() //正向查找字符位置,从0开始从左往右开始数,返回遇到的第一个相符的下标号,如果字符串内不存在这样的字符,就返回-1
string.LastIndexOf() //反向查找字符位置,从0开始从右往左开始数,返回遇到的第一个相符的下标号,如果字符串内不存在这样的字符,就返回-1
string.Remove() //移除传入的下标位置及该下标之后的所有字符,或者传入两个参数,移除某个下标后指定数量的字符,返回一个新的字符串
string.replace() //会替换所有与传入参数相同的字符串,替换为第二个参数的字符串,返回一个新的字符串
string.ToUpper() //将字符串英文字符全部转换为大写,返回一个新的字符串
string.ToLower() //将字符串英文字符全部转换为小写,返回一个新的字符串
string.Substring() //截取从指定位置开始之后的字符串,或者传入两个参数,截取某个位置后指定数量的字符,返回一个新的字符串
string.Split() //以传入的参数为界,将字符串切割为字符串数组

string

C# 的 string​ 提供了很多方法方便我们使用

注意,C# 的 string​ 里边存储的字符组合本身是不可变的,也就说初始化完毕后就不会变化内容了
这也导致所有看起来修改了字符串的方法,其实都是返回了一个新的字符串

字符串指定位置字符获取

string​ 本质是 char​ 数组,因此通过索引可以获取特定位置字符

1
2
3
//string本质是char数组
string str = "MrTang";
Console.WriteLine(str[0]);

输出:

1
M

将字符串转换为字符数组

1
2
3
4
5
6
7
8
9
//转为char数组
string str = "MrTang";
char[] chars = str.ToCharArray();
Console.WriteLine(chars[1]);

for (int i = 0; i < str.Length; i++)
{
Console.WriteLine(str[i]);
}

输出:

1
2
3
4
5
6
7
r
M
r
T
a
n
g

字符串拼接(格式化)

字符串内插本质就是使用了这个方法(#TODO#​)

1
2
3
string str = "MrTang";
str = string.Format("{0}{1}", 1, 3333);
Console.WriteLine(str);

输出:

1
13333

正向查找字符位置

从 0 开始从左往右开始数,返回下标号,如果存在相同的字符,则只返回第一个相同的字符下标
如果是字符组合的,则返回需要查找的字符组合第一个字符的下标位置

如果不存在这个字符或字符组合,返回 -1

1
2
3
4
5
6
7
string str = "我是MrTangMrTang";
int index = str.IndexOf("r");
Console.WriteLine(index);
index = str.IndexOf("MrTang");
Console.WriteLine(index);
int index = str.IndexOf("A"); //如果字符串内不存在这样的字符,就返回-1
Console.WriteLine(index);

输出:

1
2
3
3
2
-1

反向查找指定字符串位置

从右往左数,返回第一次相同的字符下标,如果是字符组合的,则返回需要查找的字符组合第一个字符的下标位置
如果字符串内不存在这样的字符,就返回 -1

1
2
3
4
5
string str = "我是MrTangMrTang";
index = str.LastIndexOf("MrTang");
Console.WriteLine(index);
index = str.LastIndexOf('A');
Console.WriteLine(index);

输出:

1
2
8
-1

移除指定位置后的字符

移除传入的下标位置及该下标之后的所有字符

注意!str.remove()​ 不是直接改变字符串本身,而是返回一个新的字符串,因此需要一个变量来存储返回值,直接使用没有效果

1
2
3
4
5
string str = "我是MrTangMrTang";
str.Remove(5);
Console.WriteLine(str);
str = str.Remove(5);
Console.WriteLine(str);

输出:

1
2
我是MrTangMrTang
我是MrT

可以传入两个参数

  • 参数1:开始位置
  • 参数2:字符个数
1
2
3
string str = "我是MrT"
str = str.Remove(1, 1);
Console.WriteLine(str);

输出:

1
我MrT

替换指定字符串

会替换所有与传入参数相同的字符串,替换为第二个参数的字符串

注意!string.replace()​ 不是直接改变字符串本身,而是返回一个字符串,因此需要一个变量来存储返回值,直接使用没有效果

1
2
3
4
5
string str = "我是MrTangMrTang";
str.Replace("MrTang", "player");
Console.WriteLine(str);
str = str.Replace("MrTang", "player");
Console.WriteLine(str);

输出:

1
2
我是MrTangMrTang
我是playerplayer

大小写转换

string.ToUpper()​ 会将字符串全部转换为大写,string.ToLower()​ 会将字符串全部转换为小写

注意!string.ToUpper()​ 和 string.ToLower()​ 不是直接改变字符串本身,而是返回一个字符串,因此需要一个变量来存储返回值,直接使用没有效果

1
2
3
4
5
6
7
8
9
10
11
str = "qwertyuiop";
//注意 str.ToUpper()和str.
str.ToUpper();
Console.WriteLine(str);
str = str.ToUpper();
Console.WriteLine(str);

str.ToLower();
Console.WriteLine(str);
str = str.ToLower();
Console.WriteLine(str);

输出:

1
2
3
4
qwertyuiop
QWERTYUIOP
QWERTYUIOP
qwertyuiop

字符串截取

截取从指定位置开始之后的字符串,或者传入两个参数,截取某个位置后指定数量的字符

注意

与其他的方法一样,Substring​ 不是直接改变字符串本身,而是返回一个字符串,因此需要一个变量来存储返回值,直接使用没有效果
截取的指定个数不能超过字符串长度,不会自动判断是否越过界限,否则报错

1
2
3
4
5
string str = "MrTangMrTang";
str = str.Substring(2);
Console.WriteLine(str);
str = str.Substring(2, 3);
Console.WriteLine(str);

输出:

1
2
TangMrTang
ngM

字符串切割

split()​ 方法就是以传入的参数为界,将字符串切割为字符串数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
string str = "1,2,3,4,5,6,7";
//下面的代码,将会以“,”为界,将字符串切割成若干份存储到字符串数组内
string[] strs = str.Split(',');
for (int i = 0; i < strs.Length; i++)
{
Console.WriteLine(strs[i]);
}

str = "1_1|1_2|3_3|5_1|6_1|7_2|8_3";
string[] strs2 = str.Split("|");
for (int i = 0;i < strs2.Length; i++)
{
string[] temp = strs2[i].Split("_");
for (int j = 0; j < temp.Length; j++)
{
Console.Write(temp[j] + ",");
}
Console.Write("\n");
}

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
1,1,
1,2,
3,3,
5,1,
6,1,
7,2,
8,3,