第三部分 基本类型:第14章 字符、字符串和文本处理

14.1 字符
在.Net Framework中,字符总是表示成16位Unicode代码值。每个字符都表示成System.Char结构(值类型)的一个实例。

3种实现数字类型与Char实例互相转换:
1.强转 效率最高
2.使用Convert类型  
3.使用IConvertible接口

 

14.2 System.String类型
String类型不可变,直接派生自Object,所以是一个引用类型。
String类型实现的接口:IComparable/IComparable<String>,ICloneable,IConvertible,IEnumerable/IEnumerable<Char>和IEquatable<String>

14.2.1 构造字符串
多个字符串连接,不用使用+来操作,会在堆上创建多个字符串对象,影响性能。一般都会用System.Text.StringBuilder类型。

14.2.2 字符串是不可变的
String类型不可变的好处:
1.操作或访问字符串时不会发生线程同步的问题。
2.CLR可以通过一个String对象共享多个完全一致的String内容,减少系统中字符串数量节省内存(“字符串留用”)。

14.2.3 比较字符串
判断字符串相等或排序时,建议用以下方法:
Equals、Compare、StartWith、EndsWith。

14.2.4 字符串留用
只在内存中保留字符串的一个实例,将显著提供内存的利用率。

14.2.5 字符串池
编译代码时,如果同一个文本常量字符串出现多次,编译器会将单个字符串的多个实例合并为一个实例,可以减少模块大小。

14.2.6 检查字符串中的字符和文本元素
String类型提供的属性和方法:
Length,Chars,GetEnumerator,ToCharArray,Contains,IndexOf,LastIndexOf,IndexOfAny和LastIndexOfany。

14.2.7 其他字符串操作

 

 14.6 编码:字符和字节的项目转换
在CLR中所有字符都是以16位Uncode码值形式来表示的,而且所有字符串都有16位Unicode码值构成。

常用的两种编码方案UTF-16和UTF-8:
● UTF-16也称为“Unicode编码”,将每个16位字符编码成2个字节。它根本不对字符产生任何影响,而且不会涉及压缩处理,性能非常出色。

● UTF-8将部分字符编码成1个字节,2个字节,3个字节或4个字节。值在0x0080之下的字符压缩成1个字节(英美字符)。0x0080-0x07FF的字符被转换为2个字节(欧洲和中东)。0x0800以及之上的字符被转换成3个字节(东亚地区)。代理项对被表示成4个字节。如果编码的许多字符都在0x0800或之上的值,那么它的效率不如UTF-16。

 

不常用的编码方案:
● ASCII编码:将16位字符编码成ASCII字符。值小于0x0080的16位字符被转换成单字节。值超过0x007F的任何字符都不能被转换,否则字符的值会丢失。

● UTF-32使用4个字节来编码所有字符。

 

 

你可能感兴趣的:(字符串)