在 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 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.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} 两个$$号表示 {{}}