Web应用的字符(串)处理(C#)
一、 字符(串)的编码
1、 Unicode / ANSI
我们要把文件和网页内部头信息中声明的编码采用同样的方式
涉及到国际化,推荐使用Unicode(即UTF-8)
2、 HtmlEncode(html编码) / HtmlDecode(html解码)
<P> / <P>
3、 UrlEncode(url编码) / UrlDecode(url解码)
%E6%88%91%E4%BB%AC / 我们(Unicode)
%CE%D2%C3%C7 / 我们(GB-2312)
二、 字符(串)的格式化
1、 格式化概述
http://msdn.microsoft.com/zh-cn/library/26etazsy(VS.80).aspx
2、 数字的格式化
C、D、E、F、G、N、P、R、X……
int i = 123;
Console.WriteLine(i.ToString("C3")); // ¥123.000
http://msdn.microsoft.com/zh-cn/library/427bttx3(v=VS.80).aspx
3、 日期和时间的格式化
O、R、s、u;
y、M、d、h、H、m、s、t、T、f、F……
DateTime nowTime = DateTime.Now;
Console.WriteLine(nowTime); // 2010/7/15 21:26:07
Console.WriteLine(nowTime.ToString("yyyy-MM-dd")); // 2010-07-15
Console.WriteLine(nowTime.ToString("yyyy-MMM-dd")); // 2010-七月-15
Console.WriteLine(nowTime.ToString("yyyy-MM-dd hh:mm:ss")); // 2010-07-15 09:29:28
Console.WriteLine("{0}将在{1}到达北京", "clh", DateTime.Now); // clh将在2010/7/15 21:33:15到达北京
Console.WriteLine("{0}将在{1:yyyy年MM月dd日}到达北京", "clh", DateTime.Now); // clh将在2010年07月15日到达北京
Console.WriteLine(nowTime.ToString("ddd")); // 三
Console.WriteLine(nowTime.ToString("dddd")); // 星期三
http://msdn.microsoft.com/zh-cn/library/97x6twsz(v=VS.80).aspx
4、 枚举的格式化
G/g、F/f、D/d、X/x
DayOfWeek myDays = DayOfWeek.Wednesday;
Console.WriteLine(myDays.ToString("G")); // Wednesday
Console.WriteLine(myDays.ToString("F")); // Wednesday
Console.WriteLine(myDays.ToString("D")); // 3
Console.WriteLine(myDays.ToString("X")); // 00000003
http://msdn.microsoft.com/zh-cn/library/c3s1ez6e(v=VS.80).aspx
5、 自定义的格式化
{、}、/、; 、. 、0、#......
http://msdn.microsoft.com/zh-cn/library/0asazeez(v=VS.80).aspx
6、 复合格式化
String.Format、AppendFormat、WriteLine、TextWriter.WriteLine
http://msdn.microsoft.com/zh-cn/library/txafckwd(v=VS.80).aspx
三、 字符(串)的常规处理
1、 字符串的连接、拆分
String.Split 将字符串拆分为字符串数组
可以给Split()传递多个分隔符
string s = "I have a dream,to,world.car !";
string[] wordArray = s.Split(' ', ',', '.');
String.Join 将字符串数组连接成字符串
string+string 字符串相加
StringBuilder 字符串构造器
简单的字符串相加用string+string,复杂字符串相加用StringBuilder
2、 类型转换
A、 Parse
B、 TryParse(返回是否转换成功,True表示转换成功,False表示转换失败)
3、 内容分析、处理、比较
A、 判断字符串为空
只是单单的判断值为空的话,用string.Empty
要同时判断值为空和为null时,用string.IsNullOrEmpty 或者 a.Length > 0
B、 判断字符串以***开始或结束
string a = "-*$123456*-$";
Console.WriteLine(a.StartsWith("-&")); // False
Console.WriteLine(a.EndsWith("-$")); // True
C、 去除边沿字符
string a = "-*$123456*-$";
Console.WriteLine(a.Trim("-*$".ToCharArray())); // 123456
D、 不区分大小写的比较是否相同
转换为小写函数:s1.ToLower()
转换为大写函数:s2.ToUpper()
C#底层对变成大写做了一个优化,如果转大写/小写,优先选择大写
不区分大小写的比较还可以用:string.Compare(s2, s1, true)
true表示不区分大小写;false表示区分大小写
为0表示相等,不为0表示不相等
其底层其实是用ToUpper()实现的
E、 其他常用方法:
Replace():替换
string s2 = s1.Replace("dream", "money");
String.Substring:取子字符串
string s1 = "1234567";
string s2 = s1.Substring(2); // 34567
string s3 = s1.Substring(2, 2); // 34 从第几位开始,取几个
Contains():是否含有某个子串
string s1 = "12345";
bool b = s1.Contains("127"); // False
String.IndexOf:判断某个子字符串在字符串中第一次出现的位置(从左开始记)
string s1 = "123456";
int i1 = s1.IndexOf("12"); // 0
int i2 = s1.IndexOf("x"); // -1
String.LastIndexOf:判断某个子字符串在字符串中最后一次出现的位置
string s1 = "56123456";
int i1 = s1.LastIndexOf("56"); // 6
int i2 = s1.LastIndexOf("x"); // -1
PadLeft():字符串左边补足
string s1 = "123";
string s2 = s1.PadLeft(5, '#'); // ##123
PadRight():字符串右边补足
string s1 = "123";
string s3 = s1.PadRight(5, '#'); // 123##
String.Remove:删除此字符串中从指定位置到最后位置的所有字符。
string s = "abc---def";
Console.WriteLine("Index: 012345678"); // Index: 012345678
Console.WriteLine("1) {0}", s); // 1) abc---def
Console.WriteLine("2) {0}", s.Remove(3)); // 2) abc
Console.WriteLine("3) {0}", s.Remove(3, 3)); // 3) abcdef
四、 正则表达式的基本使用
1、 语法
2、 多练
3、 RegexTester.exe:正则表达式工具,可以生成正则表达式代码
4、 几个特殊的正则表达式
汉字:[/u4e00-/u9fa5]+
双字节字:[/x00-/xff]+
全角:[/uFF00-/uFFFF]
日期、IP地址等,需要总结
5、 Regular Expression Library
五、 其他
1、 字符与字符串
char c = 't';
string s = "tom";
char类型是字符类型,表示一个字符,用单引号,可以是't'、'中'等
string类型是字符串类型,表示一个字符串,用双引号
string可以看做是char的只读数组
string s = "tom";
char c = s[0];
2、 给一个字符串加上双引号,两种做法:
sArray[i] = '"' + sArray[i] + '"';
sArray[i] = "/"" + sArray[i] + "/"";
3、 C#每句是以;结尾的,故一句代码可以回车,但是应该是在运算符处回车,而不能拆分关键字