不管创建什么类型的应用程序,你都需要使用字符串。无论数据如何存储,终端用户总要与可读的文本打交道。因此,了解如何使用字符串是任何.NET开发者创建丰富的应用程序所需要学习的必要知识。除了向你展示在.NET框架中字符串的使用外,本文还将向你介绍正规表达式的知识。
除了向你展示如何使用.NET框架中的字符串外,本文还将向你介绍正规表达式。正规表达式是格式代码,不仅允许你验证一个特定字符串匹配一个给定的格式,而且你还可以使用正规表达式来从任何其它可能被认为是自由格式的文本中提取有意义的信息,例如从用户输入中提取第一个名字,或从一个数字输入中提取代码,或从一个URL中提取服务器名。
一、 使用字符串
使用字符串是创建高质量应用程序的一个必要的技巧。即使你在处理数字或图像数据,终端用户也需要上下文反馈。本文将向你介绍.NET字符串,如何格式它们,操作它们和比较它们,及其它有用的操作。
(一) .NET字符串简介
在.NET框架和通用语言运行时刻(CLR)以前,开发者总是花费大量时间处理字符串。一个字符串例程可重用库几乎是每一个C和C++程序员的工具箱中的一部分。编写在不同程序语言之间交换字符串数据的代码也是相当困难的。例如,Pascal把字符串存储为一个内存字符数组,其中,该数组的第一个元素指示字符串的长度;而C把字符串存储为一个具有可变长度的字符内存数组,字符串的末端加上一个ASCII null字符(在C中以""表示)。
在.NET框架中,字符串以常量方式存储。这意味着,当你用C#(或任何其它.NET语言)创建一个字符串时,该字符串以一种固定大小存储在内存以便CLR运行更快些。结果是,当你实现例如连接字符串或修改一个字符串中的单个字符时,CLR实际上是创建你的字符串的多个副本。
C#中的字符串与其它值类型例如整数或浮点数声明方式相同,见下面的例子:
string x = "Hello World";
string y;
string z = x;(二) 格式化字符串
当使用字符串时最常见的一项任务是格式化字符串。当向用户显示信息时,你经常显示如日期,时间,数字值,十进制值,货币值,甚至象十六进制数字这样的内容。C#字符串都能够显示这些类型的信息,甚至更多。另外一个强有力的特征是,当你使用该标准格式化工具时,该格式化的输出具有地区感知特征。例如,如果你以短格式显示一个英格兰用户的当前日期,那么对于一个美国用户来说,当前日期的短格式将以不同形式显示。
为了创建一个格式化的字符串,你仅需要调用string类的Format方法,并且传递给它一个格式字符串,如下列代码所显示的:
string formatted = string.Format("The value is {0}", value);在此,{0}占位符指示一个值应该被插入的位置。除了指定一个值应该被插入的位置外,你还可以指定该值的格式。
其它数据类型还支持经由定制格式修饰符转换成字符串,例如,DateTime数据类型,通过使用如下方式,它能够产生一种定制格式的输出:
DateTime.ToString("format specifiers");表格1列举了用于格式化日期,时间,数字值等数据的一些最常用的格式字符串。
表格1.定制DateTime格式修饰符
| 修饰符 | 描述 |
| d | 显示某月中的这一天。 |
| dd | 显示某月中的这一天,其中,小于10的值之前加上一个0。 |
| ddd | 显示一个星期中某一天的三字母缩写名。 |
| dddd(+) | 显示给定的DateTime值中星期中的一天的完整名。 |
| f(+) | 显示秒值的最重要的x位数。在f中格式修饰符位数越多,该数字越重要。这是个总秒数,而不是从上个分钟以来经过的秒数。 |
| F(+) | 与f(+)相同,除了不显示末尾的零外。 |
| g | 显示一个给定的DateTime中的时代,例如,"A.D"。 |
| h | 显示小时,范围为:1~12。 |
| hh | 显示小时,范围为:1~12,其中,小于10的值之前加上一个0。 |
| H | 显示小时范围为:0~23。 |
| HH | 显示小时范围为:0~23,其中,小于10的值之前加上一个0。 |
| m | 显示分钟,范围为0~59。 |
| mm | 显示分钟,范围为0~59,其中,小于10的值之前加上一个0。 |
| M | 显示月份,范围为1~12。 |
| MM | 显示月份,范围为1~12,其中,小于10的值之前加上一个0。 |
| MMM | 显示月份的三字符缩略名。 |
| MMMM | 显示月份的完整名字。 |
| s | 显示秒数范围为:0~59。 |
| ss(+) | 显示秒数范围为:0~59,其中,小于10的值之前加上一个0。 |
| t | 显示给定的时间中AM/PM指示器中的第一个字符。 |
| tt(+) | 显示给定的时间中完整的AM/PM指示器。 |
| y/yy/yyyy | 显示给定的时间中的年份。 |
| z/zz/zzz(+) | 显示给定的时间中的时区偏移量。 |
让我们观察下列代码,它展示使用字符串格式修饰符创建定制格式的日期和时间字符串:
DateTime dt = DateTime.Now;
Console.WriteLine(string.Format("Default format: {0}", dt.ToString()));
Console.WriteLine(dt.ToString("dddd dd MMMM, yyyy g"));
Console.WriteLine(string.Format("Custom Format 1: {0:MM/dd/yy hh:mm:sstt}", dt));
Console.WriteLine(string.Format("Custom Format 2: {0:hh:mm:sstt G\MT zz}", dt));下面是前面代码的输出:
Default format: 9/24/2005 12:59:49 PM
Saturday 24 September, 2005 A.D.
Custom Format 1: 09/24/05 12:59:49PM
Custom Format 2: 12:59:49PM GMT -06你还可以提供针对数字值的定制格式修饰符。表格2描述了适用于数字值的定制格式修饰符。
表格2.数字定制格式修饰符
| 修饰符 | 描述 |
| 0 | 零占位符。 |
| # | 数字占位符。如果给定的值中在#修饰符指示的位置有一个数字,那么该数字将以格式化输出显示。 |
| . | 十进制点。 |
| , | 千分位分隔符。 |
| % | 百分比修饰符。被格式化的值在包括到格式化的输出前将乘以100。 |
| E0/E+0/e/e+0/e-0/E | 科学标志。 |
| "XX"或"XX" | 代表格式的字符串。这些被包含在格式化的输出中,而不翻译其相对位置。 |
| ; | 用于条件格式化负数,零和正值的节分隔符。 |
如果定义多个格式节,那么你可以更精确地控制数字的格式化:
· 两个节-如果你有两个格式化节,则第一节应用于所有正数(包括0)值。第二节应用于负数值,当你想把负数值包括在括号中(就象中许多财务软件包中一样),这是十分方便的。
· 三个节-如果你有三个格式化节,则第一个节应用于所有正数(不包括0)值。第二节应用于负数值,第三节应用于零。
下列代码显示如何使用定制数字格式修饰符。
double dVal = 59.99;
double dNeg = -569.99;
double zeroVal = 0.0;
double pct = 0.23;
string formatString = "{0:$#,###0.00;($#,###0.00);nuttin}";
Console.WriteLine(string.Format(formatString, dVal));
Console.WriteLine(string.Format(formatString, dNeg));
Console.WriteLine(string.Format(formatString, zeroVal));
Console.WriteLine(pct.ToString("00%"));前面的代码将产生如下所示的输出结果:
$59.99
($569.99)
nuttin
23%
(三) 操作和比较字符串
除了显示包含各种格式化数据的字符串外,其它普通与字符串有关的任务就是字符串操作和比较。要记住的一个重要的事情是,字符串实际上是.NET框架基类库中的一个类。因为它是一个类,所以实际上,你可以调用一个字符串的方法,就象你可以调用任何其它类上的方法一样。
你可以在字符串常数或字符串变量调用这些方法,见下列代码:
int x = string.Length();
int y = "Hello World".Length();表格3简短列举了一些你可以使用于字符串的最常用的方法以便获得该字符串的信息或操作它。
表格3.常用的字符串实例方法
| 方法 | 描述 | |
| CompareTo | 把这个字符串实例与其它字符串实例比较。 | |
| Contains | 返回一布尔值,指示是否当前字符串实例包含给定的子串。 | |
| CopyTo | 从字符串实例中把一个子串复制到一个字符数组的特定位置。 | |
| EndsWith | 返回一布尔值,指示是否字符串以一个给定的子串结束。 | |
| Equals | 指示是否该字符串等于另一个字符串。你还可以使用'=='操作符来代替。 | |
| IndexOf | 返回一个子串在字符串实例中的索引。 | |
| IndexOfAny | 返回一个字符串实例中在子串内的任何字符的第一次
在百度中搜索更多理解VC# 2005中的字符串和正规表达式相关网页 转贴于:中国下载站
【中国下载站】【设为主页】【收藏本页】【打印本文】【回到顶部】【关闭此页】 相关文章
文章评论(评论内容只代表网友观点,与本站立场无关!)
栏目导航
分类广告
热门文章
|