C# 字符串

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

string ch = "S";
string str = "String";
string name = "This is a string.";

内存中 String 对象的最大大小为 2GB 或大约 10 亿个字符。 然而,实际上它会较小这依赖于计算机的 CPU 和内存。

在 C# 中有两种方法可以声明字符串变量。 使用 System.String 类或使用 string 关键字。 两者都是一样的,没有区别。

string str1 = "Hello"; // 使用关键字 string
 
String str2 = "Hello"; // 使用 System.String 类

var a = new String("asdf"); //初始化类的方式,少见

在 C# 中,字符串是字符的集合或数组。 因此,字符串可以使用字符数组创建或像字符数组一样访问。

char[] chars = { '你', '好', '世', '界' };

string str1 = new string(chars);
String str2 = new String(chars);

foreach (char c in str1)
{
    Console.WriteLine(c);
}

特殊字串

现实世界中的文本可以包含任何字符。 在C#中,因为字符串被双引号包围,所以不能在字符串中包含"。下面会报错。

string text = "This is a "string" in C#."; //这样写是不行的

所以想在字符串里面插入一些特殊的字符我们得用转义字符 反斜杠 \, 双引号就要变成 " 如果 还想包含转义字符本身的话就得用两个 \ 如果要换行的话我们可以用\r\n 如下示例

string text = "This is a \"string\" in C#.";
string str = "xyzdef\\rabc";
string path = "\\\\mypc\\ shared\\project";
string lines = "hello\r\n my name is \r\n malema.net";
转义字符 字符名称
' 单引号 输入单个字符char 时候会用到
" 双引号
\ 反斜杠
\0 空字符
\a 警报符
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表
\v 垂直制表

在一个文本有多行的情况下,我们还可以用 @ 号来定义. 跟上面最后一行的效果是一样的

string lines = @"hello
 my name is 
 malema.net";

在使用@的时候如果我们还想在字符串里面放到双引号"的话 我们会发现这个时候没有办法用转义字符。 我们必须得用 ""两个双引号来表示一个双引号

string lines = @"hello
 my name is\""
 malema.net";

字符串的拼接 String Concatenation

我们可以用 + 号来接拼字符串

string name = "Mr." + "James " + "Bond" + ", Code: 007";
 
string firstName = "James";
string lastName = "Bond";
string code = "007";
 
string agent = "Mr." + firstName + " " + lastName + ", Code: " + code;

字符串在 C# 中是不可变的。 这意味着它是只读的,一旦在内存中创建就无法更改。 每次连接字符串时,.NET CLR 都会为连接的字符串创建一个新的内存位置。 因此,如果您连接五个以上的字符串,建议使用 StringBuilder 而不是 string。 (所以也导致了 字符串虽然是引用类型 但是表现行为类似于值类型。)

var sb = new StringBuilder();
sb.Append("hello:");
sb.Append("abc");

Console.WriteLine(sb.ToString());

字符内插 String Interpolation

在这个语法糖出现之前我们一般是用string.Format为拼接一些消息字符串

var name = "malema";
var age = 10;
var message = string.Format("myname:{0},age:{1:f2}", name, age);
Console.WriteLine(message);myname:malema,age:10:00

C# 6 包含一个特殊字符 $ 来标识内插字符串。 内插字符串是静态字符串和字符串变量的混合体,其中字符串变量应位于 括号中。

var name = "malema";
var age = 10;
//var message = string.Format("myname:{0},age:{1}", name, age);
var message2 = $"myname:{name},age:{age:f2}"; // 可以加入格式化:f2
Console.WriteLine(message2);//myname:malema,age:10.00

如果我们的字符串里面本身就要有大括号我们就得使用{{ }}来表示它们了。 $号也可以跟@号合起来用

原始字符串文本

(C#11 .net 7) 跟@号有点象但是支持 双引号

string longMessage = """
    This is a long message.
    It has several lines.
        Some are indented
                more than others.
    Some should start at the first column.
    Some have "quoted text" in them.
    """;

也可以跟 $配合使用

var Longitude = 111;
var Latitude = 200;
var location = $$"""
   You are at {{{Longitude}}, {{Latitude}}}
   """;

输出 You are at {111, 200} 两个$$号表示 {{}}

上一篇:C# 数字类型
下一篇:C# 日期 时间
最近更新的
...