C#基础-7-字符串与String类

前文:

在 C# 中,可以使用字符数组来表示字符串,但是,更常见的做法是使用 string 关键字来声明一个字符串变量,string 关键字是 System.String 类的别名。

创建对象

您可以使用以下方法之一来创建 string 对象:

  • 通过给 String 变量指定一个字符串
  • 通过使用 String 类构造函数
  • 通过使用字符串串联运算符( +
  • 通过检索属性或调用一个返回字符串的方法
  • 通过格式化方法来转换一个值或对象为它的字符串表示形式

实例:

using System;

namespace StringApplication
{
    class Program
    {
        static void Main(string[] args)
        {
           // 字符串,字符串连接
            string fname, lname;
            fname = "Rowan";
            lname = "Atkinson";

            string fullname = fname + lname;
            Console.WriteLine($"Full Name: {fullname}");

            // 通过使用 string 构造函数
            char[] letters = { 'H', 'e', 'l', 'l','o' };
            string greetings = new string(letters);
            Console.WriteLine($"Greetings: {greetings}");

            // 方法返回字符串
            string[] sarray = { "Hello", "From", "Tutorials", "Point" };
            string message = String.Join(" ", sarray);
            Console.WriteLine($"Message: {message}");

            // 用于转化值的格式化方法
            DateTime waiting = new DateTime(2012, 10, 10, 17, 58, 1);
            string chat = String.Format($"Message sent at {waiting:t} on {waiting:D}");
            Console.WriteLine($"Message: {chat}");
            Console.ReadKey() ;
        }
    }
}

输出:

Full Name: RowanAtkinson
Greetings: Hello
Message: Hello From Tutorials Point
Message: Message sent at 17:58 on Wednesday, 10 October 2012

常用属性和方法

以下内容生成模型:QwQ-32B,生成时间:2025 03-11 14:39

方法/属性 用途 示例
Length 获取字符串长度 str.Length
Concat 拼接字符串 String.Concat(a, b)
Join 用分隔符拼接数组 String.Join(", ", array)
IndexOf 查找子字符串位置 str.IndexOf("World")
Substring 截取子字符串 str.Substring(0, 5)
Replace 替换子字符串 str.Replace("old", "new")
Split 拆分字符串为数组 str.Split(',')
ToUpper / ToLower 转换大小写 str.ToUpper()
StartsWith 判断是否以指定子字符串开头 str.StartsWith("He")
Contains 判断是否包含子字符串 str.Contains("lo")
Trim 去除前后空白 str.Trim()
Format 格式化字符串 String.Format("{0} {1}", a, b)

Length属性

作用:获取字符串的字符数。

string str = "Hello";
int length = str.Length; // 输出 5

Concat静态方法

作用:拼接多个字符串。

string result = String.Concat("Hello", " ", "World"); // 输出 "Hello World"

Join静态方法

作用:用指定分隔符拼接字符串数组。

string[] names = { "Alice", "Bob", "Charlie" };
string joined = String.Join(", ", names); // 输出 "Alice, Bob, Charlie"

IndexOf方法

作用:查找子字符串或字符的位置。

string str = "Hello World";
int index = str.IndexOf("World"); // 返回 6(从索引 6 开始)
int charIndex = str.IndexOf('o'); // 返回 4(第一个 'o' 的位置)

Substring方法

作用:截取子字符串。

string str = "Hello World";
string sub1 = str.Substring(0, 5); // "Hello"(从索引0开始,长度5)
string sub2 = str.Substring(6);   // "World"(从索引6到末尾)

Replace方法

作用:替换字符串中的子字符串。

string str = "Hello World";
string replaced = str.Replace("World", "C#"); // 输出 "Hello C#"

Split方法

作用:按分隔符拆分字符串为数组。

string str = "apple,banana,cherry";
string[] fruits = str.Split(','); // 数组包含 "apple", "banana", "cherry"

ToUpper和ToLower方法

作用:转换字符串为大写或小写。

string str = "Hello";
string upper = str.ToUpper(); // "HELLO"
string lower = str.ToLower(); // "hello"

StartsWith和EndsWith方法

作用:判断字符串是否以指定子字符串开头或结尾。

string str = "Hello World";
bool startsWith = str.StartsWith("Hell"); // true
bool endsWith = str.EndsWith("orld");     // true

Contains方法

作用:判断字符串是否包含指定子字符串。

string str = "Hello World";
bool hasWorld = str.Contains("World"); // true

Trim方法

作用:去除字符串前后空白字符。

string str = "  Hello World  ";
string trimmed = str.Trim(); // "Hello World"

Equals和Compare方法

作用:比较字符串内容。

string a = "Hello";
string b = "hello";

bool equals = a.Equals(b); // false(区分大小写)
int compare = String.Compare(a, b, true); // 0(忽略大小写)

Format静态方法

作用:格式化字符串(如插入变量)。

string formatted = String.Format("Name: {0}, Age: {1}", "Alice", 30);
// 输出 "Name: Alice, Age: 30"

关键点

  • 字符串是不可变的(Immutable):所有方法操作都会返回新字符串,原字符串不变。
  • 区分大小写CompareEquals 等方法可通过参数控制是否忽略大小写。
  • 空字符串string.Empty 是空字符串的推荐用法,而非 " "

通过这些方法,可以高效地处理字符串的拼接、查找、转换和格式化等常见需求。

格式化时间

DateTime dt = new DateTime(2017,4,1,13,16,32,108);
string.Format("{0:y yy yyy yyyy}",dt); // 17 17 2017 2017
string.Format("{0:M MM MMM MMMM}", dt);// 4  04 四月 四月
string.Format("{0:d dd ddd dddd}", dt);// 1  01 周六 星期六
string.Format("{0:t tt}", dt); // 下 下午
string.Format("{0:H HH}", dt); // 13 13
string.Format("{0:h hh}", dt); // 1  01
string.Format("{0:m mm}", dt); // 16 16
string.Format("{0:s ss}", dt); // 32 32
string.Format("{0:F FF FFF FFFF FFFFF FFFFFF FFFFFFF}", dt); // 1 1  108 108  108   108    108
string.Format("{0:f ff fff ffff fffff ffffff fffffff}", dt); // 1 10 108 1080 10800 108000 1080000
string.Format("{0:z zz zzz}", dt); // +8 +08 +08:00
string.Format("{0:yyyy/MM/dd HH:mm:ss.fff}",dt);  // 2017/04/01 13:16:32.108
string.Format("{0:yyyy/MM/dd dddd}", dt);      // 2017/04/01 星期六
string.Format("{0:yyyy/MM/dd dddd tt hh:mm}", dt); // 2017/04/01 星期六 下午 01:16
string.Format("{0:yyyyMMdd}", dt);         // 20170401
string.Format("{0:yyyy-MM-dd HH:mm:ss.fff}", dt); // 2017-04-01 13:16:32.108

// 或者用 *.ToString() 也可以实现相同的效果:

DateTime dt = new DateTime(2017,4,1,13,16,32,108);
dt.ToString("y yy yyy yyyy"); // 17 17 2017 2017
dt.ToString("M MM MMM MMMM"); // 4  04 四月 四月
dt.ToString("d dd ddd dddd"); // 1  01 周六 星期六
dt.ToString("t tt"); // 下 下午
dt.ToString("H HH"); // 13 13
dt.ToString("h hh"); // 1  01
dt.ToString("m mm"); // 16 16
dt.ToString("s ss"); // 32 32
dt.ToString("F FF FFF FFFF FFFFF FFFFFF FFFFFFF"); //1 1  108 108  108   108    108
dt.ToString("f ff fff ffff fffff ffffff fffffff"); //1 10 108 1080 10800 108000 1080000
dt.ToString("z zz zzz");//+8 +08 +08:00
dt.ToString("yyyy/MM/dd HH:mm:ss.fff"); // 2017/04/01 13:16:32.108
dt.ToString("yyyy/MM/dd dddd");      // 2017/04/01 星期六
dt.ToString("yyyy/MM/dd dddd tt hh:mm"); // 2017/04/01 星期六 下午 01:16
dt.ToString("yyyyMMdd");         // 20170401
dt.ToString("yyyy-MM-dd HH:mm:ss.fff"); // 2017-04-01 13:16:32.108