String 类

转载 2016年05月31日 14:43:10

From:MSDN https://msdn.microsoft.com/zh-cn/library/system.string(VS.80).aspx



字符串是 Unicode 字符的有序集合,用于表示文本。String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。

String 对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。看来似乎修改了 String 对象的方法实际上是返回一个包含修改内容的新 String 对象。如果需要修改字符串对象的实际内容,请使用 System.Text.StringBuilder 类。

字符串中的每个 Unicode 字符都是由 Unicode 标量值定义的,Unicode 标量值也称为 Unicode 码位或者 Unicode 字符的序号(数字)值。每个码位都是使用 UTF-16 编码进行编码的,编码的每个元素的数值都用一个 Char 对象表示。

一个 Char 对象通常表示一个码位,即:Char 的数值等于该码位。但是,一个码位可能需要多个编码元素。例如,Unicode 辅助码位(代理项对)使用两个 Char 对象来编码。

索引

索引是 Char 对象在 String 中的位置,而不是 Unicode 字符的位置。索引是从零开始、从字符串的起始位置(其索引为零)计起的非负数字。连续的索引值可能并不与连续的 Unicode 字符相对应,这是因为一个 Unicode 字符可能会编码为多个 Char 对象。若要使用每个 Unicode 字符而不是每个 Char 对象,请使用 System.Globalization.StringInfo 类。

序号运算和区分区域性的运算

String 类的成员对 String 对象执行序号运算或语义运算。序号运算是对每个 Char 对象的数值执行的。语义运算则对考虑了特定于区域性的大小写、排序、格式化和语法分析规则的 String 的值执行。语义运算在显式声明的区域性或者隐式当前区域性的上下文中执行。有关当前区域性的更多信息,请参见 CultureInfo.CurrentCulture 主题。

大小写规则决定如何更改 Unicode 字符的大小写,例如,从小写变为大写。

格式化规则决定如何将值转换为它的字符串表示形式,而语法分析规则则确定如何将字符串表示形式转换为值。

排序规则确定 Unicode 字符的字母顺序,以及两个字符串如何互相比较。例如,Compare 方法执行语义比较,而 CompareOrdinal 方法执行序号比较。因此,如果当前的区域性为美国英语,则 Compare 方法认为“a”小于“A”,而 CompareOrdinal 方法会认为“a”大于“A”。

.NET Framework 支持单词、字符串和序号排序规则。单词排序会执行区分区域性的字符串比较,在这种比较中,某些非字母数字 Unicode 字符可能会具有特殊的权重。例如,连字符(“-”)的权重非常小,因此“coop”和“co-op”在排序列表中是紧挨着出现的。字符串排序与单词排序相似,只是所有非字母数字符号均排在所有字母数字 Unicode 字符前面,没有特例。

区分区域性的比较是显式或隐式使用 CultureInfo 对象的任何比较,包括由 CultureInfo.InvariantCulture 属性指定的固定区域性。当前隐式区域性由 Thread.CurrentCulture 属性指定。

序号排序基于字符串中每个 Char 对象的数值对字符串进行比较。序号比较自动区分大小写,因为字符的小写和大写版本有着不同的码位。但是,如果大小写在应用程序中并不重要,则可以指定忽略大小写的序号比较。这相当于使用固定区域性将字符串转换为大写,然后对结果执行序号比较。

有关单词、字符串和序号排序规则的更多信息,请参见 System.Globalization.CompareOptions 主题。

区分区域性的比较通常适用于排序,而序号比较则不适合。序号比较通常适用于确定两个字符串是否相等(即,确定标识),而区分区域性的比较则不适用。

比较和搜索方法的“备注”指定方法是区分大小写、区分区域性还是两者区分。根据定义,任何字符串(包括空字符串 (""))的比较结果都大于空引用;两个空引用的比较结果为相等。

规范化

某些 Unicode 字符具有多个等效的二进制表示形式,这些表示形式中包含几组组合的和/或复合的 Unicode 字符。Unicode 标准定义了一个称为规范化的过程,此过程将一个字符的任何一种等价二进制表示形式转换为统一的二进制表示形式。可使用多种遵循不同规则的算法执行规范化,这些算法也称为范式。.NET Framework 当前支持范式 C、D、KC 和 KD。通常用序号比较来评估一对规范化的字符串。

安全注意事项

如果应用程序进行有关符号标识符(如文件名或命名管道)或持久数据(如 XML 文件中基于文本的数据)的安全决策,则该操作应该使用序号比较而不是区分区域性的比较。这是因为根据起作用的区域性的不同,区分区域性的比较可产生不同的结果,而序号比较则仅依赖于所比较字符的二进制值。

功能

String 类提供的成员执行以下操作:比较 String 对象;返回 String 对象内字符或字符串的索引;复制 String 对象的值;分隔字符串或组合字符串;修改字符串的值;将数字、日期和时间或枚举值的格式设置为字符串;对字符串进行规范化。

实现的接口

String 类分别用于实现 IComparableICloneableIConvertibleIEnumerable 和 IComparable 接口。使用 Convert 类进行转换,而不是使用此类型的 IConvertible 显式接口成员实现。

System.Object 
  System.String

该类型对于多线程操作是安全的。


CompareTo  返回的类型为  Int -1 0 1 

相关文章推荐

String类创建对象问题

  • 2014年08月14日 10:23
  • 332KB
  • 下载

java string类的实现

  • 2016年01月08日 19:49
  • 4KB
  • 下载

C++ string类字符串的常用操作及实现

#include #include namespace myspace { class string { public: //ctor 声明一个C++字符串 ...

string类思维导图

  • 2016年01月24日 13:38
  • 87KB
  • 下载

自己写的String类

  • 2014年08月20日 15:28
  • 286KB
  • 下载

C++ char数组和string类简单使用总结

使用char数组,进行字符串的操作,是c风格的操作方式。 string是C++的风格,感觉string本质上就是一个vector 以下代码详细展示了字符串的常见操作 #include #inc...

简单的string类

  • 2011年12月30日 16:01
  • 6KB
  • 下载

C++字符串类string简析

  • 2011年12月12日 13:55
  • 8KB
  • 下载

Java基础-常用API之String类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Scanner键盘录入时的一个小问题 描述:当第一次录入的是一个int类型的数据,第二次录入...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:String 类
举报原因:
原因补充:

(最多只允许输入30个字)