[CLR via C#]14. 字符、字符串和文本处理
一、字符
在.NET Framewole中,字符总是表示成16位Unicode代码值,这简化了国际化应用程序的开发。
- internal static class CharConvert {
- public static void Go() {
- Char c;
- Int32 n;
- // 使用C#转型技术实现,强制类型转换
- c = (Char);
- Console.WriteLine(c); // 显示 "A"
- n = (Int32)c;
- Console.WriteLine(n); // 显示 "65"
- c = unchecked((Char)( + ));
- Console.WriteLine(c); // 显示 "A"
- // 使用Convert进行转换
- c = Convert.ToChar();
- Console.WriteLine(c); // 显示 "A"
- n = Convert.ToInt32(c);
- Console.WriteLine(n); // Displays "65"
- // 显示Convert的范围检查
- try {
- c = Convert.ToChar(); // 对 16-bits 来说过大
- Console.WriteLine(c); // 不知心
- }
- catch (OverflowException) {
- Console.WriteLine("Can't convert 70000 to a Char.");
- }
- // 使用IConvertible进行转换
- c = ((IConvertible)).ToChar(null);
- Console.WriteLine(c); // 显示 "A"
- n = ((IConvertible)c).ToInt32(null);
- Console.WriteLine(n); // 显示 "65"
- }
- }
二、字符串
- class Program
- {
- private static void Main(string[] args)
- {
- String s = "Hi";
- Console.WriteLine(s);
- }
- }
编译上述代码,并检查它的IL,会看到一下内容:
- .method private hidebysig static void Main(string[] args) cil managed
- {
- .entrypoint
- .maxstack
- .locals init (
- [] string str)
- L_0000: nop
- L_0001: ldstr "Hi"
- L_0006: stloc.
- L_0007: ldloc.
- L_0008: call void [mscorlib]System.Console::WriteLine(string)
- L_000d: nop
- L_000e: ret
- }
- //包含回车符和换行符的字符串
- String s ="Hi\r\nthere"
但是,一般不建议这么做。因为在不同的平台解释是不同的,推荐使用System.Environment中定义的NewLine属性。NewLine属性是依赖于平台的,他会一句底层平台返回恰当的字符串。
- bool Equals (string value, StringComparison comparisonType)
- static bool Equals (string a, string b, StringComparison comparisonType)
- static int Compare (string strA, string strB, StringComparison comparisonType)
- static int Compare (String strA, String strB, bool ignoreCase, CultureInfo culture)
- static int Compare (string strA, string strB, CultureInfo culture, CompareOptions options)
- static int Compare (string strA, int indexA, string strB, int indexB, int length, StringComparison comparisonType)
- static int Compare (string strA, int indexA, string strB, int indexB, int length, CultureInfo culture, CompareOptions options)
- static int Compare (String strA, int indexA, String strB, int indexB, int length, bool ignoreCase, CultureInfo culture)
进行排序时应该总是执行区分大小写的比较。原因是假如只是大小写不同的两个字符串被视为相等,那么每次对它们进行派时许,它们都可能按照不同的顺序排列,从而造成用户的迷惑。
- public enum StringComparison {
- //使用区域敏感排序规则和当前区域比较字符串。
- CurrentCulture,
- //使用区域敏感排序规则、当前区域来比较字符串,同时忽略被比较字符串的大小写。
- CurrentCultureIgnoreCase,
- //使用区域敏感排序规则和固定区域比较字符串。
- InvariantCulture,
- //使用区域敏感排序规则、固定区域来比较字符串,同时忽略被比较字符串的大小写。
- InvariantCultureIgnoreCase,
- //使用序号排序规则比较字符串。
- Ordinal,
- //使用序号排序规则并忽略被比较字符串的大小写,对字符串进行比较。
- OrdinalIgnoreCase
- }
另外,前面有两个方法要求传递一个CompareOptions参数。这个参数要获取有CompareOptions枚举类型定义的一个值:
- public enum CompareOptions {
- None = ,
- //指示字符串比较必须忽略大小写。
- IgnoreCase = ,
- //指示字符串比较必须忽略不占空间的组合字符,比如音调符号。
- IgnoreNonSpace = ,
- //指示字符串比较必须忽略符号,如空白字符、标点符号、货币符号、百分号、数学符号、“&”符等等
- IgnoreSymbols = ,
- //指示字符串比较必须忽略 Kana 类型
- IgnoreKanaType = ,
- //指示字符串比较必须忽略字符宽度
- IgnoreWidth = ,
- //指示字符串比较必须使用字符串排序算法。
- StringSort = 0x20000000,
- //指示必须使用字符串的连续 Unicode UTF-16 编码值进行字符串比较(使用代码单元进行代码单元比较),这样可以提高比较速度,但不能区分区域性
- Ordinal = 0x40000000,
- //字符串比较必须忽略大小写,然后执行序号比较。
- OrdinalIgnoreCase = 0x10000000
- }
接受一个CompareOptions实参的方法要求你必须显式传递一个语言文化。如果传递了Ordinal或OrdinalIgnoreCase 标志,这些Comoare方法会忽略指定的语言文化。
- //检索系统对指定 System.String 的引用
- public static string Intern(string str)
- //检索对指定 System.String 的引用
- public static string IsInterned(string str)
第一个方法Intern获取一个String,获得它的哈希码,并在内部哈希表中检查是否有匹配的。如果存在一个完全相同的字符串,就返回对这个字符串已经存在的String对象的一个引用。如果不存在,就创建字符串的副本,将副本添加到内部哈希表中,并返回对这个副本的一个引用。
- public static void Go() {
- String s1 = "Hello";
- String s2 = "Hello";
- Console.WriteLine(Object.ReferenceEquals(s1, s2));// 'False'
- s1 = String.Intern(s1);
- s2 = String.Intern(s2);
- Console.WriteLine(Object.ReferenceEquals(s1, s2));// 'True'
- }
[CLR via C#]14. 字符、字符串和文本处理的更多相关文章
- [Clr via C#读书笔记]Cp14字符字符串和文本处理
Cp14字符字符串和文本处理 字符 System.Char结构,2个字节的Unicode,提供了大量的静态方法:可以直接强制转换成数值: 字符串 使用最频繁的类型:不可变:引用类型,在堆上分配,但是使 ...
- <NET CLR via c# 第4版>笔记 第14章 字符,字符串和文本处理
14.1 字符 三种数值类型与 Char 实例的相互转换: static void Main() { Char c; Int32 n; //方法一: 通过C#转型(强制类型转换)实现数字与字符的相互转 ...
- clr from c# 字符 ,字符串 和 文本处理
1,字符----------在.net中,字符总是16位的Unicode代码值.每个字符都是一个System.Char结构(值类型)的一个实列. using System; public class ...
- 重温CLR(十) 字符、字符串和文本处理
本章将介绍.net中处理字符和字符串的机制 字符 在.NET Framewole中,字符总是表示成16位Unicode代码值,这简化了国际化应用程序的开发. 每个字符都表示成System.Char结构 ...
- CLR via C#字符串和文本处理
一.字符 在.NET Framewole中,字符总是表示成16位Unicode代码值,这简化了国际化应用程序的开发. 每个字符都表示成System.Char结构(一个值类型) 的一个实例.Sy ...
- 《Python CookBook2》 第一章 文本 - 过滤字符串中不属于指定集合的字符 && 检查一个字符串是文本还是二进制
过滤字符串中不属于指定集合的字符 任务: 给定一个需要保留的字符串的集合,构建一个过滤函数,并可将其应用于任何字符串s,函数返回一个s的拷贝,该拷贝只包含指定字符集合中的元素. 解决方案: impor ...
- 13、如何拆分含有多种分隔符的字符串 14、如何判断字符串a是否以字符串b开头或结尾 15、如何调整字符串中文本的格式 16、如何将多个小字符串拼接成一个大的字符串
13.如何拆分含有多种分隔符的字符串 import re s = "23:41:2314\1234#sdf\23;" print(re.split(r'[#:\;]+',s)) ...
- Python3-Cookbook总结 - 第二章:字符串和文本
第二章:字符串和文本 几乎所有有用的程序都会涉及到某些文本处理,不管是解析数据还是产生输出. 这一章将重点关注文本的操作处理,比如提取字符串,搜索,替换以及解析等. 大部分的问题都能简单的调用字符串的 ...
- [转]python3字符串与文本处理
转自:python3字符串与文本处理 阅读目录 1.针对任意多的分隔符拆分字符串 2.在字符串的开头或结尾处做文本匹配 3.利用shell通配符做字符串匹配 4.文本模式的匹配和查找 5.查找和替换文 ...
随机推荐
- centos7 linux 安装jdk8
1.下载64位jdk8 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.在 ...
- ATA/SATA/SCSI/SAS/FC总线简介
ATA/SATA/SCSI/SAS/FC 都是应用于存储领域的总线,在当今的存储系统中,普遍应用的硬盘接口主要有 SATA . SCSI . SAS 和FC , ATA 比较古老,在一些老的低端存储系 ...
- Pro ASP.NET MVC –第五章 使用Razor
Razor是微软在MVC3中引入的视图引擎的名字,在MVC4中对其进行了改进(尽管改动非常小).视图引擎处理ASP.NET内容.寻找指令,典型地用于插入动态数据并输出到浏览器中.微软维持了两个视图引擎 ...
- 项目管理知识体系指南(PMBOOK指南)(第5版) 阅读摘要
1.7.2 项目经理的人际技能 领导力: 团队建设: 激励: 沟通: 影响力: 决策能力: 政治和文化意识: 谈判: 建立信任: 冲突管理: 教练技术: 3.4 规划过程组 在制定项目管理计划和项目文 ...
- ARM Linux启动代码分析
前言 在学习.分析之前首先要弄明白一个问题:为什么要分析启动代码? 因为启动代码绝大部分都是用汇编语言写的,对于没学过或者不熟悉汇编语言的同学确实有一定难度,但是如果你想真正深入地学习Linux,那么 ...
- 在UWP应用中实现Gif播放
众所周知,在UWP应用框架中,Image控件是无法播放GIF的图片,只能显示静态图,这样的体验不是特别友好.我在Win8.WP8.1的时候实现过gif播放功能,但是最近发现性能和播放效果都差强人意,大 ...
- MVC + EF + Bootstrap 2 权限管理系统入门级(附源码)
MVC .EF 学习有大半年了,用的还不是很熟练,正好以做这样一个简单的权限管理系统作为学习的切入点,还是非常合适的. 开发环境: VS 2013 + Git + MVC 5 + EF 6 Code ...
- CSS代码原则
css的团队合作规则以及怎样写出高性能的css代码. 一.使用Reset但并非全局Reset 同浏览器元素的默认属性有所不同,使用Reset可重置浏览器元素的一些默认属性,以达到浏览器的兼容.但需要注 ...
- EFW框架源代码版本升级记录说明
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- JavaScript 属性描述符
属性描述符(Property Descriptor)是 ES5 之后出现的概念,顾名思义,它用于描述属性应该是什么样,例如是否只读,能否枚举,能否可配置等.所有对象属性均可使用属性描述符来定义. 属性 ...