对字符串处理的常见功能

* 计算字符串的长度 *

string myString = "This is a test!";
Console.WriteLine("Text is :{0}",myString)
Console.WriteLine("Text's long is :{0}",myString.Length)

* 转换大小写 *

myString = myString.ToLower(); //所有字符转换成小写
myString = myString.ToUpper(); //所有字符转换成大写

* 删除前后空格 *

myString = myString.Trim(); //同时删除字符串前后的空格
char[] trimChars = {' ','e','s'}; //准备删除的字符
myString = myString.Trim(trimChars); //删除所有指定字符
myString = myString.TrimEnd(); //删除字符串后的空格
myString = myString.TrimStart(); //删除字符串前的空格

* 添加空格 *

myString = myString.PadRight(14,' '); //当字符串长度不够14位时,在他的右边用指定字符填充
myString = myString.PadLeft(14,' '); //当字符串长度不够14位时,在他的左边用指定字符填充

* 拆分字符串 *

string[] nStrs = myString.Split(' ',3); //按照空格进行拆分,并且返回前三个字符串


* 获取子字符串 *

string a = myString.Substring(2,2); //从myString字符串的第三位开始获取两个字符,因为索引起始位是0

* 替换字符串中的字符 *

string a = myString.Replace("i","o"); //将这个字符串中的所有“i”替换成“o”


C#中字符串实际上是Char变量的只读数组。可以用下面的方法访问字符串中每一个字符,但是不能修改他们。

string myString = "This is a test!";
foreach (char myChar in myString)
{
Console.Write("{0}",myChar);
}

要想得到一个可读写的字符数组,你可以这样。

char[] myChars = myString.ToCharArray();

特殊字符的表示方法

由于在C#中使用双引号划分字符串的开始和结束,那么对于一些特殊字符,例如双引号本身就需要使用叫做转义字符的辅助字符来表示了。

例: Console.WriteLine("我们要强调\"A方案\"。"); 的输出结果如下
我们要强调"A方案"。

下面列出其他特殊字符的表示方法。
转义字符 输出字符 unicode值
\' ' 0x0027
\" " 0x0022
\\ \ 0x005C
\0 NULL 0x0000
\n 换行符 0x000A
\r 回车符 0x000D
\f 换页符 0x000C


除了上面这种转义的方法外,还可以直接使用unicode值。例如:"She\'s dog." 和 "She\u0027s dog." 是等价的。

另外由于有时需要转义的字符实在太多,一个简便的方法就是在字符串前面加上前缀“@”。这样只有除了字符串中的双引号仍然需要转义外,其他特殊字符就不需要再使用转义符了。这个方法用在表示路径上尤为方便。例如:@"C:\WINDOWS\system32" 和 "C:\\WINDOWS\\system32" 是等价的。


/////////////////////////////////////////////////
/
/ C# 学习笔记 -- 第三天 申明和使用数据
/
/ YFP 2005-12-17
/
/////////////////////////////////////////////////

申明常量的方法如下:

const <数据类型名称> <常量名> = <新值>;

例如: const int cMyInt = 10;

注:常量只能在申明时赋值一次。申明后的常量是不允许再次赋值的。



--------------------------------------------------------------------------------


申明变量的语法如下:

<数据类型名称> <变量名>;

要注意的是C#中的变量名,变量名的首字符必须是字母、下划线或“@”。用@开头的变量有点类似于MSSQL中的变量名。

另外要注意的是,C#和C/C++一样是区分大小写的。也就是说int和INT这两个代表的是不同的含义,不像VB不区分大小写。另外在.NET下所有的类型都是以对象的方式实现的,也就是说每个数据就是这个数据类型的一个实例,可以有这个类型所有方法和属性。


常用类型如下:

整数:
数据类型 大小 范围
sbyte 8 -128-127
byte 8 0-255
short 16 -32768-32767
ushort 16 0-65535
int 32 -2147483648-2147483647
uint 32 0-4294967295
long 64 
ulong 64 

浮点数:
数据类型
float
double
decimal

其他简单类型:
数据类型 大小 备注
char 16 表示一个Unicode字符,范围在0-65535之间的整数
string 表示一组字符串
bool 布尔值:true / false

为避免处理浮点数时产生的歧义,可以对数据使用后缀表示他是何种类型。例如:3.1415d就是表示double类型,类似的还有f表示float,m表示decimal。涉及到财务计算时最好使用decimal类型,因为它是唯一基于IEEE规范的浮点类型,包含28~29位的精度,但是他的范围没有double的大,但精度比double高。

其他使用后缀的类型如下:
数据类型 后缀 例子
bool 无
int 无
long L 100L (由于小写L很容易与数字1项混淆,所以VS推荐使用大写L作为长整形的后缀)
uint u / U 5u / 6U
ulong ul / UL 100ul / 100UL
float f / F 3.14f / 3.14F
double d / D 1.01d / 1.01D
decimal m / M 20.13m / 20.13M



/////////////////////////////////////////////////
/
/ C# 学习笔记 -- 第五天 程序结构
/
/ YFP 2005-12-19
/
/////////////////////////////////////////////////

学过编成的人都知道,基本的程序结构无外乎两种:分支和循环。无论哪种编成语言甚至脚本语言都至少支持其中一种。在模块化编程中这些技巧更是不可缺少。就算到了面向对象编程的时代,也必须使用这些技巧来实现各种方法。所以牢记这些基本语法和技巧对后期的开发是个很好的开始。

一、分支:
C#中有三种分支结构

1、使用"?"这个三元运算符
语法:
<测试语句> ? <为真时执行的语句> : <为假时执行的语句> ;
例子:
string myString = (myInt > 10)?"Last than 10.":"Greater than or equal to 10.";
注:如果这时myInt的值大于10,那么myString将被赋予字符串"Last than 10.",否则将被赋予"Greater than or equal to 10."。

2、if 语句
语法1:
if (<测试语句>) 
<为真时执行的一条语句> ; 
else 
<为假时执行的一条语句> ;
注意,这时没有使用花括号。

语法2:
if (<测试语句>) 
{
<为真时执行的一组语句> ; 
}
else

<为假时执行的一组语句> ;
}

另外if语句可以镶套,也就是一个if语句中可以包含另外一个if语句。但是两个if语句的边界不能交叉,只能是包含于被包含的关系。

这样就出现了这样一种形式的if语句结构,其实他只是多个if语句的镶套。只不过这样写比较好看,便于理解。
例如:
if (<测试语句>) 
{
}
else if (<测试语句>) 
{
}
else if (<测试语句>) 
{
}
else
{
}

3、switch语句
语法:
switch (<要测试的变量或语句>) 
{
case <变量或语句的可能值>: 
<语句1>
break;
case <变量或语句的可能值>: 
<语句2>
break;
default:
<语句3>
break;
}

这是我们通常看到的switch语句的结构,其实“case <变量或语句的可能值>:”只是一个标示符,同其他标识符一样可以使用“goto”转到这些标识符。所以可能看到这样的语句不要感到奇怪,这在C#中是允许的。

switch (<要测试的变量或语句>) 
{
case <变量或语句的可能值1>: 
<语句1>
break;
case <变量或语句的可能值2>: 
<语句2>
goto case <变量或语句的可能值1>;
default:
<语句3>
break;
}
注: 这就是变量值等于可能值2的时候执行语句完成后转向"case <变量或语句的可能值1>:"执行>。

switch (<要测试的变量或语句>) 
{
case <变量或语句的可能值1>: 
case <变量或语句的可能值2>: 
case <变量或语句的可能值3>: 
<语句1>
bread;
default:
<语句2>
break;
}
注: 这个就是当可能值1、2或3种任何一个满足都会执行语句1。

例如下面这个代码片断的执行结果大家可以猜测一下:
int a = 5;
switch(a)
{
case 1:
case 2:
case 3:
case 4:
Console.WriteLine("The A maybe equal to 1 or 2 or 3 or 4,but the true's A equal to {0}.",a);
break;
case 5:
Console.WriteLine("A equal to {0}.",a);
goto case 1;
default:
Console.WriteLine("Default val:{0}",a);
break;
}

结果:
A equal to 5
The A maybe equal to 1 or 2 or 3 or 4,but the true's A equal to 5




--------------------------------------------------------------------------------



二、循环:
使用循环能够重复执行相同的语句。有下面三种形式。
1、for 循环
使用在预知循环次数时。
语法: 
for(<循环计数器(就是一个变量)>=<起始值>;<继续循环的条件>;<计数器递增或递减>) 
{
<循环体>
break; //打断循环
continue; //终止当前循环,并开始下一个循环
goto <标识符>; //跳转到指定标识符
return; //终止循环,并退出循环所在函数
}

2、do 循环
使用在循环体语句必须被执行一次的情况下。
语法:
do
{
<循环体>
}while <测试条件>;
当测试条件为真时就再次循环。

3、while 循环
使用在循环开始前就需要检查的情况。当测试条件为真时开始或继续循环。
while <测试条件>
{
<循环体>
}

终止循环的语句如上所示。

4、foreach 循环
对集合内对象的遍历,最好的办法就是用foreach。
foreach( 元素类型 e in 集合变量 )
{
// 每次循环e都代表集合变量中不同的元素。
// 当集合中所有元素都循环过之后就退出循环。
}