gpt4 book ai didi

详解C#中的string与String

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 37 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章详解C#中的string与String由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

目录 。

  • 小写 string 与大写 string
  • 声明与初始化 string
  • string 的不可变性
  • 正则 string 与原义 string
  • string 的转义序列
  • 格式化字符串
  • 操作子字符串
  • 字符串的 null 与 ""(空)
  • 可提高性能的 stringbuilder 

序 。

字符串是 string 类型的对象,它的值是文本。 在内部,文本被存储为 char 对象的顺序只读集合。 c# 字符串末尾没有以 null 结尾的字符;因此 c# 字符串可以包含任意数目的嵌入式 null 字符(“\0”)。 字符串的 length 属性代表它包含的 char 对象的数量,而不是 unicode 字符的数量。 若要访问字符串中的各个 unicode 码位,请使用 stringinfo 对象.

小写 string 与大写 string 。

在 c# 中,关键字 string 是 string 的别名。 因此,string 与 string 等效,也就是说您想用哪个就用哪个。string 类提供了很多用于安全地创建、操作和比较字符串的方法。此外,c# 语言还重载某些运算符来简化常见的字符串操作.

声明与初始化 string 。

请看示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
static void main( string [] args)
     {
       // 声明但不初始化
       string msg1;
       // 声明并初始化为 null
       string msg2 = null ;
       // 作为一个空字符串进行初始化,用 empty(空) 常量而不是字面值的 ""(空)
       string msg3 = string .empty;
       // 用正则的字符串字面值进行初始化
       string oldpath = "c:\\windows" ;
       // 直接以字符串初始化
       string newpath = @"c:\windows" ;
       // 也可以使用 system.string
       string content = "hello world!" ;
       // 使用 const 防止 msg4 被篡改
       const string msg4 = "i'm const!" ;
       // 可以使用隐式类型 var
       var msg5 = "hi!" ;
       // 使用 string 构造器进行初始化
       char [] letters = { 'a' , 'b' , 'c' };
       string alphabet = new string (letters);
       console.read();
     }

【注意】除了在使用字符数组初始化字符串时以外,不要使用 new 运算符创建字符串对象.

使用 empty 常量值初始化字符串可新建字符串长度为零的 string 对象。零长度字符串的字符串表示形式为 ""。使用 empty 值(而不是 null)初始化字符串可以降低发生 nullreferenceexception 的可能性。我们常常会在尝试访问字符串之前使用静态 isnullorempty(string) 方法验证字符串的值.

string 的不可变性 。

字符串对象是不可变的:即它们创建之后就无法更改。 所有看似修改字符串的 string 方法和 c# 中的运算符,实际上都以新字符串对象的形式返回结果。 在下面的示例中,当连接 s1 和 s2 的内容以形成一个字符串时,不会修改两个原始字符串。 += 运算符会创建一个包含组合内容的新字符串。 这个新对象赋给变量 s1,而最初赋给 s1 的对象由于没有其他任何变量包含对它的引用而释放,将在后续被垃圾回收.

示例一:

?
1
2
3
4
5
6
7
8
9
static void main( string [] args)
     {
       var s1 = "hi!" ;
       var s2 = "fanguzai!" ;
       //拼接 s1 和 s2,并且修改 s1 指向的值
       s1 += s2;  //即 s1 = s1 + s2;
       console.writeline(s1);
       console.read();
     }

详解C#中的string与String

详解C#中的string与String

图:var s1 = "hi!"; var s2 = "fanguzai!",

详解C#中的string与String

图:s1 = s1 + s2; 重新修改 s1 的指向 。

由于“修改”字符串实际上是创建一个新字符串,因此创建对字符串的引用时必须谨慎。 如果创建了对字符串的引用,然后“修改”原始字符串,则该引用指向的仍是原始对象,而不是修改字符串时创建的新对象.

?
1
2
3
4
5
6
7
8
9
static void main( string [] args)
     {
       var s1 = "hi! " ;
       var s2 = s1;
       //在 s1 重新赋值后,这次没有重新修改 s2 指向的值
       s1 += "fanguzai!" //即 s1 = s1 + "fanguzai!";
       console.writeline(s2);
       console.read();
     }

详解C#中的string与String

详解C#中的string与String

图:var s1 = "hi!"; s2 = s1; 他们指向相同的引用地址 。

详解C#中的string与String

图:s1 = s1 + "fanguzai!"; 会创建一个没有引用的 "fanguzai!",并重新修改 s1 指向的值.

正则 string 与原义 string 。

如果必须嵌入 c# 提供的转义符,则应使用正则字符串

?
1
2
3
4
5
6
7
8
9
10
static void main( string [] args)
     {
       var colustring = "col1\tcol2\tcol3" ;
       var rowstring = "row1\r\nrow2\r\nrow3" ;
       
       console.writeline(colustring);
       console.writeline( "=====" );
       console.writeline(rowstring);
       console.read();
     }

详解C#中的string与String

如果字符串文本包含反斜杠字符(例如在文件路径中),为方便起见和提高可读性,应使用原义字符串。由于原义字符串保留换行符作为字符串文本的一部分,因此可用于初始化多行字符串。在原义字符串中嵌入引号时请使用双引号。下面的示例演示原义字符串的一些常见用途:

?
1
2
3
4
5
6
7
8
9
10
11
static void main( string [] args)
     {
       var path = @"c:\windows" ;
       var text = @"are you fanguzai?
             i'm fanguzai!" ;
       
       console.writeline(path);
       console.writeline( "=====" );
       console.writeline(text);
       console.read();
     }

详解C#中的string与String

string 的转义序列 。

详解C#中的string与String

【备注】编译时,原义字符串转换为所有转义序列均保持不变的普通字符串。因而,如果在调试器监视窗口中查看原义字符串,则看到的将是编译器添加的转义字符,而不是源代码中的原义版本。 例如,原义字符串 @"c:\temp.txt" 在监视窗口中将显示为 "c:\\temp.txt".

格式化字符串 。

格式字符串是内容可以在运行时动态确定的一种字符串。采用以下方式创建格式字符串:使用静态 format 方法并在大括号中嵌入占位符,这些占位符将在运行时替换为其他值.

?
1
2
3
4
5
6
7
8
private static void main( string [] args)
     {
       const string name = "fanguzai" ;
       var s = string .format( "hi, {0}!" , name);   //使用占位符
 
       console.writeline(s);
       console.read();
     }

详解C#中的string与String

操作子字符串 。

子字符串是包含在字符串中的任意字符序列。 使用 substring 方法可以基于原始字符串的一部分创建新字符串。 可以使用 indexof 方法搜索子字符串的一个或多个匹配项。 使用 replace 方法可将指定子字符串的所有匹配项替换为一个新字符串。 与 substring 方法一样,replace 实际上返回的也是新字符串,而不修改原始字符串.

?
1
2
3
4
5
6
7
8
private static void main( string [] args)
     {
       const string s1 = "hi, fanguzai!" ;
       console.writeline(s1.substring(4));   //截取
       console.writeline(s1.replace( "hi" , "hello" ));   //替换
       console.writeline(s1.indexof( "," , stringcomparison.ordinal));   //取索引
       console.read();
     }

详解C#中的string与String

字符串的 null 与 ""(空) 。

空字符串是不包含字符的 system.string 对象的实例。 在各种编程方案中经常会使用空字符串表示空白文本字段。 可以对空字符串调用方法,因为它们是有效的 system.string 对象.

var s = string.empty,

相反,null 字符串并不引用 system.string 对象的实例,任何对 null 字符串调用方法的尝试都会生成 nullreferenceexception。 但是,可以在串联和比较操作中将 null 字符串与其他字符串一起使用.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private static void main( string [] args)
     {
       const string s1 = "hi, fanguzai!" ;
       string s2 = null ;
       var s3 = string .empty;
       var s4 = s1 + s2;   //有值的字符串与 null 拼接
       console.writeline( "s4: {0}" , s4);
       console.writeline( "" );
       var istrue = (s2 == s3);
       console.writeline( "istrue: {0}" , istrue);
       console.writeline();
       var s5 = s3 + s2;
       console.writeline( "s5: {0}" , s5);
       console.writeline();
       console.read();
     }

详解C#中的string与String

可提高性能的 stringbuilder 。

.net 中的字符串操作已高度优化,大多数情况下不会显著影响性能。但在某些应用场景中,例如在执行数百甚至好几亿次的循环中,字符串操作很可能会影响性能。 stringbuilder 类创建了一个字符串缓冲区,用于在程序执行大量字符串操作时提供更好的性能。 stringbuilder 字符串可以重新分配个别字符(内置字符串数据类型所不支持的字符)。例如,此代码在不创建新字符串的情况下更改了一个字符串的内容:

?
1
2
3
4
5
6
7
static void main( string [] args)
     {
       var sb = new stringbuilder( "~ hi! fanguzai!" );
       sb[0] = '^' ;
       console.writeline(sb);
       console.read();
     }

详解C#中的string与String

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我! 。

原文链接:http://www.cnblogs.com/liqingwen/p/6155790.html 。

最后此篇关于详解C#中的string与String的文章就讲到这里了,如果你想了解更多关于详解C#中的string与String的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com