1. 入门
实际开发中,字符串最常见的需求有这些:
- 获取字符串长度(顺便看看是不是空的)。
- 切换字母大小写(全大写或者全小写)。
- 查找字符串里有没有某个词或者字符。
- 把“脏话”换成文明点的词。
- 按分隔符拆分字符串(比如“手机号列表用逗号分开”)。
- 去掉字符串开头和结尾的空格。
- 截取字符串的一部分(比如姓氏的前三个字母)。
- 比较两个字符串——忽略大小写看看是不是一样。
每个需求,string类都有专门的方法。
常用方法速查表
| 操作 | 方法/属性 | 例子 |
|---|---|---|
| 字符串长度 | |
|
| 第一个字符 | |
|
| 最后一个字符 | |
|
| 转小写 | |
|
| 转大写 | |
|
| 判断是否包含子串 | |
|
| 子串位置 | |
|
| 截取字符串 | |
|
| 比较字符串 | |
|
| 去除空格 | |
|
| 按分隔符拆分 | |
|
| 数组合并成字符串 | |
|
| 替换部分内容 | |
|
| 空字符串? | |
|
今天我们会讲其中的一些。
2. 把字符串当数组用
字符串长度:Length属性
最简单的操作——看看字符串有多少个字符。用Length属性就行。例子:
string name = "Аркaдий";
Console.WriteLine(name.Length); // 输出: 7
- Length是属性(不是方法),所以不用括号。
- 如果字符串是空的(""),长度就是0。
有时候,在对字符串做“危险”操作(比如截取子串)前,最好先检查一下长度。
按索引取字符:[i]索引器
和数组一样:字符串其实就是字符数组。例子:
string hello = "Hello";
char firstChar = hello[0]; // 'P'
char lastChar = hello[^1]; // 't'
Console.WriteLine(firstChar);
- 索引从0开始!
- 注意:如果访问不存在的索引(hello[100]),会抛异常。
3. 字符串比较
字符串操作符==和!=
在C#里,这两个操作符直接比较字符串内容。
string word1 = "Hello";
string word2 = "Hello";
bool areEqual = word1 == word2; // true
Equals方法
和==不一样,Equals方法可以传参数。比如可以不区分大小写比较——像"Мaмa" == "мaмa"也等于"MAMA"。例子:
string pass1 = "Qwerty";
string pass2 = "qwerty";
// 标准比较,区分大小写
bool isSame = pass1.Equals(pass2); // false
// 不区分大小写比较
bool ignoreCase = pass1.Equals(pass2, StringComparison.OrdinalIgnoreCase); // true
4. 切换大小写
想把字符串变成全大写(或全小写),string类有两个专用方法:ToLower()和ToUpper()。
比如你想让用户看到“重要!”的提示,或者想把所有名字都转成小写来比较?很简单:
string text = "Мне Не Сtрaшен Серый Волк!";
Console.WriteLine(text.ToUpper()); // I AM NOT AFRAID OF THE BIG GRAY WOLF!
Console.WriteLine(text.ToLower()); // мне не сtрaшен серый волк!
- 注意:原始字符串不会变!
- 可以用来做不区分大小写的字符串比较。
5. 去除多余空格
如果用户不小心(或者故意,谁知道呢)在名字前后加了空格?Trim来帮你!它有三种用法:
- Trim——去掉字符串开头和结尾所有空格;
- TrimStart——只去掉开头空格;
- TrimEnd——只去掉结尾空格。
string raw = " Гошa ";
string cleaned = raw.Trim(); // "Гошa"
Console.WriteLine($"[{cleaned}]");
6. 截取子串:Substring
有时候只想要字符串的一部分。
string word = "Hello";
string part = word.Substring(2); // "ивеt"
string part2 = word.Substring(2, 3); // "иве"
- Substring(startIndex)——从startIndex字符开始到结尾。
- Substring(startIndex, length)——从startIndex开始,取length个字符。
注意:如果越界或者length < 0,会抛异常!
7. 检查字符串是否为空
在用字符串(比如插值)前,最好先判断一下它不是null也不是空的,不然可能出错或者结果很奇怪。
a) 用null判断+==操作符
string s = null;
if (s == null)
Console.WriteLine("字符串等于null");
缺点:不能判断空字符串("")。
b) 用string.IsNullOrEmpty()判断
能同时判断null和空字符串:
string s = "";
if (string.IsNullOrEmpty(s))
Console.WriteLine("字符串为空或等于null");
c) 用string.IsNullOrWhiteSpace()判断
还能判断只包含空格、tab等“看不见”的字符:
string s = " ";
if (string.IsNullOrWhiteSpace(s))
Console.WriteLine("字符串为空、null或全是空格");
8. 字符串方法常见坑
- 最常见的坑——忘了字符串是不可变(immutable)的,上面已经说过了。
- 还有一个常见失误——查找和比较时忘了大小写敏感。
比如,用户输入了"aндрей",但列表里已经有"Andy",如果你直接用Contains或者==,可能就查不到,除非你把两个字符串都转成同样的大小写,或者用带参数的方法。
还有,注意那些返回索引的方法。索引是从0开始的,如果返回-1,说明没找到,不是“索引0”。
GO TO FULL VERSION