[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.查找和替换文 ...
随机推荐
- ASP.NET MVC 入门8、ModelState与数据验证
原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/08/1305962.html ViewData有一个ModelState的属性,这是一个类型 ...
- C# WinForm 技巧十: 开发工具
一.摘要 为了开发效率就应该为这个框架开发一个配套工具.来生成固定格式的代码.工具界面如下: 二.数据库整理篇 添加表主键 修改表说明 修改表字段说明 生成数据库文档 导出数据库里相同的字 ...
- Mac系统下,在android studio中使用Github版本管理
1.下载并安装github客户端http://git-scm.com/download/ 2.打开android studio,测试github是否使用ok 点击"test",如果 ...
- GitHub 操作流程示例
最新文章:Virson's Blog 参考文章: 博客园-Web前端开发,博客园-喻头快跑,GotGitHub 首先.通过github网站新建一个仓库,得到仓库地址 https://github.co ...
- C primer plus 练习题 第五章
1. #include <stdio.h> #define MINU 60 int main() { int minute, hour, m; printf("请输入分钟:&qu ...
- android 开发环境
http://blog.csdn.net/shulianghan/article/details/38023959
- jQuery---EasyUI小案列
jQuery EasyUI为提供了大多数UI控件的使用,如:accordion,combobox,menu,dialog,tabs,validatebox,datagrid,window,tree等等 ...
- webkit特有的css属性
内容参见:http://css-infos.net/properties/webkit 具体的定义网页里有详细说明.做有一些html5的应用的时候如果不能很好的适应手机,可以到这上面去找找方法-web ...
- rsync安装配置及故障解决完全教程[window, 文件同步]
Rsync是的全称是: remote synchronize, 也就是远程同步数据, 它是一款不错的文件同步软件,而且是免费的, 它在镜像保存整个目录树和文件系统的同时保持原来文件的权限.时间.软硬链 ...
- 不同gdb,相同数据集合并
众所周知,数据处理是GIS中一项重要且繁琐的工作,处理数据的工具和方法也太多了,在做数据处理的时候,经常会遇到这样的问题:对存储在不同gdb中.并且数据集名称相同的数据进行合并处理: 如图:数据组织如 ...