.NETFramework类库
数值、日期和字符串处理
1、Math类和数学函数
Abs, Max, Sqrt, Exp, Pow, Log等。Round, Floor, Ceiling可以舍入到整数或确定精度。
2、Random类和随机函数
Random r = new Random(); //空构造函数,默认使用当前系统时间作为seed
r.Next() //产生非负随机整数
r.Next(非负随机整数A) //产生大于等于0,小于A的随机整数
r.Next(整数A, 整数B) //产生大于等于A, 小于B的随机整数
r.NextDouble() //产生大于等于0.0小于1.0的随机双精度浮点数
3、日期和时间处理
C#中一般使用System.DateTime类表示和处理日期。如果涉及时区,则使用System.TimeZoneInfo和System.DateTimeOffset类。DateTime属于System的命名空间。
DateTime dt1 = new DateTime(2009, 7, 16); //2009 / 07 / 16
DateTime dt2 = new DateTime(2009, 7, 18, 18, 30, 15) // 2009 / 07 / 18 18:30:15
DateTime包含很多字段,如Today, Day, Hour, Second和方法 如 Add, AddDays等
Parse方法:静态方法,将日期和时间的指定字符串表示形式转换为其等效的DateTime
string myDateTimeValue = "2/16/1992 12:15:12";
DateTime myDateTime = DateTime.Parse(myDateTimeValue);myDateTime的值为: 1992-2-16 12:15:12
TryParse方法:静态方法。将日和和事件的指定字符串表示形式转换为其等效的DateTime
DateTime myDateTime;
DateTime.TryParse(myDateTimeValue, myDateTime); //myDateTime的值为: 1992-2-16 12:15:12
4、字符串处理
C#字符串是Unicode字符的有序集合,Unicode字符使用UTF-16编码,编码的每个元素的数值都使用一个System.Char对象表示,Char占两个字节。
string字符串是用string关键字声明的字符数组,使用双引号声明。 string s = "hello world";
字符串可以包含转义字符(如"\t", "\n")。如果希望包含反斜杠,则它前面必须还有另一个反斜杠。带@符号(原义字符串)时,字符串构造函数将忽略转义符合分行符。在原义字符串中,用另一个双引号字符转义双引号字符。
string hello = "hello\nworld" ; //转义字符\n 有效
string filePath1 = "\\\\My Document\\" //等效于 \\My Document\
string filePath2 = @"\\My Documents\" //等效于 \\My Documents\
string s = @"you say ""goodbye"""; //等效于 you say "goodbye"
string 对象为只读的,因为一旦创建了该对象,就不能修改该对象的值。有些字符串操作看来似乎修改了string对象,但实际上是返回一个包含修改内容的新的string对象。如果需要修改字符串对象的实际内容,可以使用System.Text.StringBuilder类。
5、字符编码
默认情况下,公共语言运行库使用UTF-16编码(Unicode转换格式,16位编码形式)表示字符。使用编码/解码,可以实现字符编码在UTF-16编码方式和其他编码方式(如ASCII编码、UTF-8编码)之间的转换。
System.Text命名空间中对字符进行编码和解码最常用的类为
ASCII 编码 System.Text.ASCIIEncoding 将字符与ASCII字符相互转换
UTF-16编码 System.Text.UnicodeEncoding将其他编码与UTF-16之间进行转换
UTF-8编码 System.Text.UTF8Encoding将其他编码与UTF-8之间进行转换
多种编码 System.Text.Encoding 将字符与指定的各种编码相互转换
Encoding ascii = Encoding.ASCII;
Encoding unicode = Encoding.Unicode;
string unicodeString = "字符串包含unicode字符";
//将string转换为byte[]
byte[] unicodeByte = unicode.GetBytes(unicodeString);
//执行一个编码转换为另一个编码
byte[] asciiByte = Encoding.Convert(unicode, ascii, unicodeByte);
//将byte[] 转换为char[],再转换为string
char[] asciiChars =
new char[ascii.GetCharCount(asciiByte, 0, asciiByte.Length)];
ascii.GetChars(asciiByte, 0, asciiByte.Length, asciiChars, 0);
string asciiString = new string(asciiChars);
6、正则表达式
正则表达式提供了功能强大、灵活高效的方法来处理文本:快速分析大量文本以找到特定的字符模式;提取、编辑、替换或删除文本字符串;将提取的字符串添加到集合以生成报告。正则表达式广泛应用于各种字符串处理程序,例如HTML处理、日志文件分析和HTTP报头分析。
正则表达式语言:
正则表达式是由普通字符(例如a-z)以及特殊字符(成为元字符,例如 点号,\,?,*, +, {, } , (, ), [, ]等)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串,正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。正则表达式使用的常用字符和匹配模式如下:
字符 | 匹配模式 |
\ | 将下一个字符标记为特殊字符或字面值,例如 “\n"与换行符匹配, "\\"与 ”\"匹配。 |
^ | 匹配输入的开始位置 |
$ | 匹配输入的结尾 |
* | 匹配前一个字符0次或几次。例如 "zo*”可以匹配"zo", "zoo"等 |
+ | 匹配前一个字符一次或多次。例如"zo+"可以匹配 "zoo",但不能匹配"zo" |
? | 匹配前一个字符0次或1次。例如, "a? ve?" 可以匹配 "never"中的ve |
. | 匹配换行符以外的任意字符 |
(pattern) | 与模式匹配并记住匹配。匹配的字符串可以从作为结果的Matches集合中使用 Item[0] ....[n]取得。 如果要匹配括号字符 ( 和 ), 可使用 "\(" 或 "\)" |
x|y | 匹配x或y。例如 g|food 可匹配 “g"或 "food", "(g|f)ood" 匹配 "good"或 "food" |
{n} | n为非负整数,匹配恰好n次,例如,"o {2}"不能与 "Bod"中的"o"匹配,但可以与 good 的前两个o匹配 |
{n , } | n为非负的整数,匹配至少n次。例如 o {2 , } 匹配 fooood中所有的o, o{1 , }等价于 "o+", o{0, }等价于o* |
{n, m} | m和n均为非负整数,匹配至少n次,最多m次。 |
[xyz] | 一个字符集,与括号中字符的其中之一匹配。例如"[abc]" 匹配 "plain"中 的 a |
[ ^xyz] | 一个否定的字符集,匹配不在括号中的任何字符。例如 "[abc]"可以匹配“plain”中的 p, l, i, n |
[a-z] | 表示某个范围内的字符,与指定区间内的任何字符匹配。例如 “[a-z]”匹配 "a"与"z"之间的任何一个小写字母字符 |
[^ m -z] | 否定的字符区间。与不在指定区间内的字符匹配 |