Skip to main content

3月28日 字符串

字符串是什么

简单说:字符串就是一串字符。比如:

hello world // 一串英文是字符串
大漠沙如雪,燕山月似钩。 // 一串中文是字符串
123456 // 一串数字也可以是字符串

但是,在程序中,为了让编译器能够识别出这是字符串,C#语法强制规定:所有字符串必须使用双引号包裹。

字符串是使用双引号包括的不可变的有序字符序列。

字符串的特点

  • 必须使用双引号包裹
  • 固定性:字符串一旦创建,不可改变。所有修改字符串的操作(拼接、替换、截取)都会生成新字符串
  • 有序性:字符串是有序的排列的,这意味着字符串中的每个字符都有它的编号,这个编号称之为。
  • 引用类型
string s = "a";
s += "b"; // 不是修改原字符串,而是创建新字符串 "ab"

声明与初始化字符串

声明字符串是指只声明字符串变量,不赋值。

string str1;
string str2; // 也可以先声明,后赋值
str2 = "Hello World"; // 但是这样写稍显啰嗦,推荐声明字符串的同时初始化。

初始化字符串指声明字符串变量的同时,赋予初始值。

// 普通字符串
string str3 = "hello world";

声明空字符串

// 空字符串
string s1 = ""; // 在内存中创建了一个字符串对象,内容为空,长度是 0

// null
string s3 = null; // null不指向任何对象(空引用)


三、常用方法(高频)

1. 获取信息

str.Length;         // 长度
str.Contains("abc");// 是否包含
str.StartsWith("a");// 是否以...开头
str.EndsWith("z"); // 是否以...结尾
str.IndexOf("b"); // 第一次出现的索引,找不到返回 -1
str.LastIndexOf("b");// 最后一次出现的索引

2. 修改/处理字符串

str.ToUpper();      // 转大写
str.ToLower(); // 转小写
str.Trim(); // 去掉首尾空格
str.Substring(2); // 从索引2开始截取到末尾
str.Substring(2,3); // 从索引2开始,取3个字符
str.Replace("a","b");// 替换所有a为b

3. 分割与合并

// 分割
string[] arr = "a,b,c".Split(',');

// 合并
string s = string.Join("-", arr); // "a-b-c"

4. 判断空/空值

// 最常用
string.IsNullOrEmpty(str); // null 或 ""
string.IsNullOrWhiteSpace(str);// null、空、全是空格

四、字符串拼接

  1. + 号(简单场景)
  2. $ 字符串插值(推荐,最清晰)
    string name = "tom";
    string s = $"姓名:{name}";
  3. StringBuilder(大量拼接时必须用,性能极高)
    StringBuilder sb = new StringBuilder();
    sb.Append("a");
    sb.Append("b");
    string res = sb.ToString();

五、字符串比较

// 相等
str1 == str2

// 不区分大小写比较
string.Equals(str1, str2, StringComparison.OrdinalIgnoreCase);

六、字符串与其他类型转换

// 数字 → 字符串
num.ToString();

// 字符串 → 数字(推荐用 TryParse,不报错)
int.TryParse(str, out int n);

七、重点面试题

  1. string 是值类型还是引用类型? 引用类型,但有值类型的行为。

  2. 字符串为什么不可变? 安全、线程安全、哈希值稳定、字符串池优化。

  3. string.Empty 和 "" 和 null 的区别?

    • ""string.Empty 一样,是空字符串
    • null 是没有指向对象
  4. 大量拼接字符串为什么要用 StringBuilder? 因为 string 不可变,拼接会产生大量垃圾对象,StringBuilder 直接修改内存,性能高。


总结(最核心 4 句话)

  1. string 是引用类型、不可变
  2. 常用方法:Length、Contains、Substring、Replace、Trim、Split
  3. 拼接优先用 $插值,大量拼接用 StringBuilder
  4. 判断空用 string.IsNullOrEmpty / IsNullOrWhiteSpace

需要我给你出一套 C# 字符串练习题 巩固一下吗?