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

声明和初始化字符串

View Code

//1.声明字符串,没有初始化string message1;

//2.使用null初始化字符串string message2 = null;

//3.使用Empty初始化字符串,可新建字符串长度为零的String对象。//零长度字符串的字符串表示形式为""。//使用Empty值(而不是null)初始化字符串可以降低发生NullReferenceException的可能性string message3 = String.Empty;

//4.初始化一个普通的字符串string oldPath = "c:\\Program Files\\Microsoft";

//5.初始化一个逐字字符串string newPath = @"c:\Program Files\Microsoft";

//6.本地变量(即在方法体),你可以使用隐式类型。var temp = "I'm still a ...";

//7.除了在使用字符数组初始化字符串以外,不要使用new运算符创建字符串对象。char[] letters = {'A','B','C'};string alphabet = new string(letters);

字符串对象的不可变性

字符串对象是不可变的:即它们创建之后就无法更改。所以看似修改字符串的String方法和C#运算符实际上都以新字符串对象的形式返回结果。

View Code

//在下面的示例中,当连接s1和s2的内容形成一个字符串时,不会修改两个原始字符串。//+=运算符会创建一个包含组合内容的新字符串。这个新对象赋给变量s1,而最初赋给//s1的对象由于没有其他任何变量包含对它的引用而释放,用于垃圾回收。string s1 = "A string is more";string s2 = "than the sum of its chars.";s1 += s2;System.Console.WriteLine(s1);//Output:A string is more than the sum of its chars.

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

View Code

string s1 = "Hello";string s2 = s1;s1 += "World";System.Console.WriteLine(s2);//Output:Hello

普通字符串和原义字符串

如果必须嵌入C#提供的转义符,则应使用普通字符串:

View Code

string columns = "Column 1\tColumn 2\tColumn 3";//Output: Column 1        Column 2        Column 3

string rows = "Row 1\r\nRow 2\r\nRow 3";/* Output:  Row 1  Row 2  Row 3*/

string title = "\"The \u00C6olean Harp\", by Samuel Taylor Coleridge";//Output: "The Æolean Harp", by Samuel Taylor Coleridge

如果字符串文本包含反斜杠字符,为方便起见和提高可读性,应使用原义字符串。由于原义字符串保留换行符作为字符串文本的一部分,因此可用于初始化多行字符串。

在原义字符串中嵌入引号时请使用双引号。

View Code

string filePath = @"C:\Users\scoleridge\Documents\";//Output: C:\Users\scoleridge\Documents\

string text = @"My pensive SARA ! thy soft cheek reclined    Thus on mine arm, most soothing sweet it is    To sit beside our Cot,...";/* Output:My pensive SARA ! thy soft cheek reclined   Thus on mine arm, most soothing sweet it is   To sit beside our Cot,... */

string quote = @"Her name was ""Sara.""";//Output: Her name was "Sara."

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

string s = String.Format("{0} World!","Hello");Console.WriteLine(s);

WriteLine方法的一个重载将格式字符串用作参数。因此,可以只嵌入格式字符串,而无需显式调用该方法。但若使用WriteLine方法在Visual Studio“输出”窗口中显示

调试输出,则必须显式调用Format方法,因为WriteLine只接受字符串,而不接受格式字符串。

子字符串

子字符串是包含在字符串中的任意字符序列。

使用SubString方法可以基于原始字符串的一部分创建新字符串。

可以使用IndexOf方法搜索子字符串的一个或多个匹配项。

使用Replace方法可将指定子字符串的所有匹配项替换为一个新字符串。

与SubString方法一样,Replace实际上返回的也是新字符串,而不修改原始字符串。

访问各个字符

可以使用带索引值的数组表示法获取对各个字符的只读访问。

View Code

string s5 = "Printing backwards";for(int i = 0; i < s5.Length; i++){    System.Console.Write(s5[s5.Length - i - 1]);}//Output:"sdrawkcab gnitnirP"

可以使用StringBuilder对象修改各个字符

View Code

string question = "hOW DOES mICROSOFT wORD DEAL WITH THE cAPS lOCK KEY?";System.Text.StringBuilder sb = new System.Text.StringBuilder(question);

for (int j = 0; j < sb.Length; j++){if (System.Char.IsLower(sb[j]) == true)    {        sb[j] = System.Char.ToUpper(sb[j]);    }else if (System.Char.IsUpper(sb[j]) == true)    {        sb[j] = System.Char.ToLower(sb[j]);    }}// Store the new string.string corrected = sb.ToString();System.Console.WriteLine(corrected);// Output: How does Microsoft Word deal with the Caps Lock key?   

Null字符串和空字符串

空字符串是不包含字符的System.String对象的实例。可以对空字符串调用方法,因为它们是有效的System.String对象。

string s = String.Empty;

null字符串并不引用System.String对象的实例,任何对null字符串调用方法的尝试都会生成NullReferenceException。

但是,可以在串联和比较操作中将null字符串与其他字符串一起使用。

View Code

static void Main(){string str = "hello";string nullStr = null;string emptyStr = String.Empty;

string tempStr = str + nullStr;// The following line displays "hello." Console.WriteLine(tempStr);

bool b = (emptyStr == nullStr);// The following line displays False. Console.WriteLine(b);

// The following line creates a new empty string. string newStr = emptyStr + nullStr;

// Null strings and empty strings behave differently. The following// two lines display 0. Console.WriteLine(emptyStr.Length);    Console.WriteLine(newStr.Length);// The following line raises a NullReferenceException.//Console.WriteLine(nullStr.Length);

// The null character can be displayed and counted, like other chars. string s1 = "\x0" + "abc";string s2 = "abc" + "\x0";// The following line displays "* abc*". Console.WriteLine("*" + s1 + "*");// The following line displays "*abc *". Console.WriteLine("*" + s2 + "*");// The following line displays 4. Console.WriteLine(s2.Length);}

转载于:https://www.cnblogs.com/yechun/archive/2012/04/06/2434932.html

3.C#编程指南-字符串相关推荐

  1. c#语言中怎么样把文本转换成数字,如何将字符串转换为数字 - C# 编程指南 | Microsoft Docs...

    如何将字符串转换为数字(C# 编程指南) 02/16/2021 本文内容 你可以调用数值类型(int.long.double 等)中找到的 Parse 或 TryParse 方法或使用 System. ...

  2. zzz KVC/KVO原理详解及编程指南

    前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的理解. 2.由于KVO内容较少,而且是以KVC为基础实现的,本文将着重介绍KVC部分. 一.简介 KVC/KVO是观察者模 ...

  3. 如何:重写 ToString 方法(C# 编程指南)

    如何:重写 ToString 方法(C# 编程指南) C# 中的每个对象都继承 ToString 方法,此方法返回该对象的字符串表示形式.例如,所有 int 类型的变量都有一个 ToString 方法 ...

  4. Spark编程指南(Python版)

    Spark编程指南 译者说在前面:最近在学习Spark相关的知识,在网上没有找到比较详细的中文教程,只找到了官网的教程.出于自己学习同时也造福其他初学者的目的,把这篇指南翻译成了中文,笔者水平有限,文 ...

  5. libuv 中文编程指南

    最近看了一些有关 libuv 的东西,另外复习了一些与同步.异步.阻塞.非阻塞,异步IO(aio)的东西, 算是技术积累吧,等有时间了整理出一个完整的文档出来,希望在今后的编程中用到. 不多说了,本文 ...

  6. 《javascript面向对象编程指南》读书笔记

    <javascript面向对象编程指南>读书笔记 <javascript面向对象编程指南>读书笔记 第一章 面向对象的JavaScript 第二章 基本数据类型与流程控制 变量 ...

  7. 《Linux与unix Shell编程指南》 总结

    <Linux与unix Shell编程指南> 总结 标签: linux网络dstcron服务器 2011-01-10 18:27 3742人阅读 评论(0) 收藏 举报 分类: Linux ...

  8. KVC/KVO原理详解及编程指南

    作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注 ...

  9. iPhone应用程序编程指南(窗口和视图)

    窗口和视图 窗口为内容显示提供背景平台,而视图负责绝大部分的内容描画,并负责响应用户的交互. 什么是窗口和视图? UIWindow的作用 iPhone应用程序通常只有一个窗口,表示为一个UIWindo ...

  10. Spark编程指南V1.4.0(翻译)

    Spark编程指南V1.4.0 ·        简介 ·        接入Spark ·        Spark初始化 ·        使用Shell ·        在集群上部署代码 ·  ...

最新文章

  1. linux中EOF的用法梳理
  2. 数字化转型难?那是你没搞懂这5个关键点
  3. 详解如何在ubuntu上安装node.js
  4. 区块连教程(一):前置知识-linux补充
  5. 算法与数据结构1800题 之 栈和队列
  6. 买断变订阅!苹果第一付费软件被骂上热搜 官方回应
  7. SQLite 3.7.13的加密解密(二)—— 开放宏定义
  8. [网络安全自学篇] 八十八.基于机器学习的恶意代码检测技术详解
  9. 【OpenCV】-算子(Sobel、Canny、Laplacian)学习
  10. 1900型USB接口扫描枪设置虚拟串口模式提升扫描速度
  11. 大学计算机第四版蒋加伏ppt,大学计算机基础 普通高等教育十一五 国家级规划教材 教学课件 作者 蒋加伏 王宇 第5章 Powerpoint 2003演示文稿制作基础.ppt...
  12. Linux使用strlen编译,strlen in NASM Linux
  13. C语言编程软件的选择和下载
  14. 忘记ubuntu登录密码
  15. 瑞星千万巨款贿赂官员 制造冤狱铲除竞争对手图片
  16. html制作钟表盘,CSS3简易表盘时钟
  17. 青岛科技大学软件测试专业如何,青岛科技大学优势专业排名
  18. Think In Java第四版读书笔记
  19. 微商大咖龚文祥遭查税:退出微商,微信收款有补税风险?
  20. SQL 使用别名(使用 AS 关键字)

热门文章

  1. linux系统关闭指定服务的方式
  2. zabbix批量操作
  3. AngularJS开发指南6:AngularJS表单详解
  4. 过滤器Filter与监听器Listener
  5. 超实用的JavaScript技巧及最佳实践(下)
  6. OCS Inventory NG使用之win平台下的AGENT端安装与信息收集(一)
  7. 控制总线上发送的控制信息
  8. GPS时钟模块授时仪 与 同步时钟,1PPS
  9. 2.1 机器中数据的存储
  10. iOS集成支付宝H5支付实现跳转与回调的解决方案