您的位置:首页 > 编程语言 > C#

【C#】基础知识—字符与字符串

2016-03-02 23:24 465 查看
一、概念

C#中对文字的处理大多是通过对字符和字符串的操作来实现的,字符和字符串通过char和string来表示

二、字符类char的使用

1. 概述

Char在c#中表示一个Unicode字符,正式这些Unicode字符构成了字符串。一个Unicode的字符的标准长度为两个字节

Char提供了很多实用的方法,其中Is和To开头的方法比较常用,Is开头的方法大多是判断Unicode字符是否为某个类别,以To开头的方法主要是转换为其他Unicode字符。

2. 转义字符

 1>  转义字符:是由一个\ 加 一个字母来组成具有特殊意义的一个字符

Console.WriteLine("C#中要有\"\" 引起来");
Console.ReadKey();
使用场景:当我们需要在字符串中输入一些特殊字符时,比如:半角引号,换行,退格。就需要使用转义字符
常用的转义字符有: 

\n  ——  换行          \n  ——  换行   \\  ——  \

\b  ——  退格(backSpace)  \t  ——  一个或者空格组成的一个字符,具有行与行之间的对其功能(tab键)

 2> 在字符串前面加一个@符号有两种意义
 1) 字符串中如果有\,则不再理解为转移字符

Console.WriteLine(@"C#中要有\\ 引起来");
输出:C#中要有\\ 引起来
 2) 字符串可以换行

 3> C#中可以是用八进制的转义字符前缀(”\d“)、十六进制的转移字符前缀(”\x“)、或者Unicode表示法前缀(”\u“)对字符型变量进行赋值

三、字符串类string的使用

.NET Framwork中表示字符串的关键字为string,它是String类的别名。string类型表示Unicode字符的字符串。String类类似于string类型,但是功能更加强大。虽然String类功能很强,它也是不可改变的,这就是说一旦创建了String对象,就不能够修改。表面上看来能够修改字符串的所有方法实际上不能够修改。它们实际上返回一个根据所调用方法修改的心的String,当需要大量修改时,可使用StringBuilder。

1. 概述

字符串是Unicode字符的有序集合,用于表示文本。String对象时System.Char对象的有序集合,用于表示字符串。String对象的值是该有序集合的内容,并且该值是不可变的。

2. 比较字符串

 1> Compare方法用来比较两个字符串是否相等,它有很多个重载方法,其中最常用的两种如下:

Int Compare(string strA, string strB);
Int Compare(string strA, string strB, bool ignorCae);
string strA:表示要比较的字符串
string strB:表示要比较的字符串

bool ignorCase:是一个布尔类型的参数,如果这个参数的值是true,那么在比较字符串时就忽略大小写的区别

Compare是一个静态方法,所以在使用时,可以直接饮用。(类调用)

public static void test9()
{
string str1 = "beijing";
string str2 = "Beijing";

Console.WriteLine("str1 = {0}", str1);
Console.WriteLine("str2 = {0}", str2);

if (string.Compare(str1, str2) == 1)
{
Console.WriteLine("str1在字典中的位置大于str2");
}
else
{
if (string.Compare(str1, str2) == -1)
{
Console.WriteLine("str1在字典中的位置小于str2");
}
else
{
Console.WriteLine("str1在字典中的位置等于str2");
}
}

if (string.Compare(str1, str2, true) == 0)
{
Console.WriteLine("忽略大小写后,str1在字典中的位置等于str2");
}
else
{
Console.WriteLine("忽略大小写后,str1在字典中的位置不等于str2");
}
}
 2> CompareTo方法
CompareTo与Compare方法相似,都可以比较两个字符串是否相等,不同的是CompareTo方法以实例对象本身指定的字符串作比较。(对象调用)

Public int CompareTo(string strB);
strB:表示要比较的字符串
if (str1.CompareTo(str2) == 0)
{
Console.WriteLine("str1在字典中的位置等于str2");
}
 3> Equals方法
Equals方法主要用于比较两个字符串是否相同,如果相同返回值是true,否则为false,它有两种常用的方法:

 1)实例方法

public bool Equals(string value);
value是与实例化比较的字符串

 2)静态方法

public static bool Equals(string a, string b);
string a:表示要进行比较的字符串
string b:表示要进行比较的字符串

注意:如果仅仅是要比较两个字符串是否相等,优先使用Equals方法或者”==“来比较

”==“一般用于比较两个引用是否一样,但是为了方便比较字符串,规定”==“用于比较两个字符串的值是否相等。

public static void test9()
{
string str1 = "beijing";
string str2 = "Beijing";

Console.WriteLine("str1 = {0}", str1);
Console.WriteLine("str2 = {0}", str2);

Console.WriteLine("两个字符串的值是否一样");
Console.WriteLine(str1.Equals(str2));   // 实例对象
Console.WriteLine(string.Equals(str1, str2));  // 静态方法
Console.WriteLine();
}

比较Java中的区别:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452156.html

3. 格式化字符串

c#中,String类提供了一个静态的Format方法,用于将字符串数据格式化成制定的格式。

语法:

public static string Format(string format, object obj);

format:用来指定字符串所要格式化的形式;

obj:表示要被格式化的对象;

用于日期时间的格式规范:https://msdn.microsoft.com/zh-cn/library/az4se3k1.aspx

案例:

public static void test10()
{
DateTime dt = System.DateTime.Now;
Console.WriteLine("显示系统时间");
string time = string.Format("{0:d}", dt) + "\n" +
string.Format("{0:D}", dt) + "\n" +
string.Format("{0:g}", dt) + "\n" +
string.Format("{0:M}", dt) + "\n" +
string.Format("{0:Y}", dt) + "\n" +
"当前的系统时间为: " + string.Format("{0:F}", dt);

Console.WriteLine(time);
Console.WriteLine();

}




4. 截取字符串

String类提供了一个Substring方法,该方法可以截取字符串中指定位置和指定长度的字符串

public string Substring(int startIndex, int length);
startIndex:字符串的起始位置的索引
length:子字符串中的字符数

案例:

public static void test11()
{
Console.WriteLine("阅读");
string str = "床前明月光,疑是地上霜!";
// 截取
string str1 = str.Substring(0, 2) + str.Substring(4, 2);
Console.WriteLine("原来的诗句是: " + str); // 床前明月光,疑是地上霜!
Console.WriteLine("截取后的诗句是: " + str1); // 床前光,
Console.WriteLine();
}
 5> 分割字符串
String类提供了一Split方法,用于分割字符串,该方法的返回值是包含所有分割子字符串的数组对象,可以通过数组取得所有分割的子字符串。

public string[] Split(params char[] separator);

separator:是一个数组,包含分割符

案例:

// 分割字符串
public static void test12()
{
string str = "welcome!to,beijing";
Console.WriteLine("分割前的str为:\n{0}", str);
char[] separator = { '!', ',' };  // 声明一个分割字符数组(char类型的数组,包含两个分割符)
Console.WriteLine("分割字符为: ");
for (int i = 0; i < separator.Length; i++)
{
Console.Write(separator[i]);

}
Console.WriteLine();
string[] str1 = str.Split(separator);  // 分割字符串
str = "";
for (int i = 0; i < str1.Length; i++)  // 遍历连接分割后的子字符串
{
str += str1[i];

}
Console.WriteLine("分割后str为: \n{0}", str);
Console.WriteLine();
}


注意:与分割字符串相对应的是合并字符串,它可以使用String.Join方法来实现;

 6> 插入字符串

String类提供了一Insert方法,用于向字符串中的任意位置插入新元素;

public string Insert(int startIndex, string value);

startIndex:用于指定所要插入的位置,索引从0开始

value:指定所要插入的字符串

案例:

// 插入字符串
public static void test13()
{
string str = "welcometobeijing";
Console.WriteLine("原来的字符串str为: \n{0}", str);
str = str.Insert(7, " ");
str = str.Insert(10, " ");
Console.WriteLine("插入字符之后是: \n{0}", str);
// 获取原字符串
str = str.Substring(0, 7) + str.Substring(8, 2) + str.Substring(11, 7);
Console.WriteLine("获取的原字符串是: \n{0}", str);
Console.WriteLine();

}


 7> 填充字符串

String类提供了PadLeft/PadRight方法用于填充字符串,PadLeft方法在字符串的左侧进行字符填充,而PadRight方法在字符串的右侧进行字符填充

public steing PadLeft(int totalWidth, char paddingChar);
totalWidth:指定填充后的字符长度;
paddingChar:指定所要填充的字符,如果省略,则填充空格字符

实例:

// 插入字符串
public static void test14()
{
string str = "_";                 // 定义初始化字符串
char[] ch = { '$', '=', '?' };    // 定义要填充的字符串
string[] express = new string[3];  //定义数组存储填充完毕的的字符串
for (int i = 0; i < ch.Length; i++)  //
{
string str1 = str.PadLeft(2, ch[i]);
express[i] = str1.PadRight(3, ch[i]);
}

Console.WriteLine("哈哈{0}是什么", express[0]);
Console.WriteLine("哈哈{0}是什么", express[1]);
Console.WriteLine("哈哈{0}是什么", express[2]);

Console.WriteLine();
}


8> 删除字符串

String类提供了一Remove方法,用于从一个字符串的指定位置开始,删除指定数量的字符,它有两种重载方法;

 1)删除字符串中从指定位置到最后位置的所有字符

<pre name="code" class="csharp">public Sreing Remove(int startIndex);


startIndex:用于指定开始删除 的位置,索引要从0开始;
2)从字符串中指定位置开始删除指定数目的字符

public Sreing Remove(int startIndex, int count);
startIndex:用于指定开始删除 的位置,索引要从0开始;
count:指定删除的字符数量;

案例:

// 删除字符串
public static void test15()
{
string str = "独上高楼望尽天涯路";
Console.WriteLine("原来的语句是:{0}", str);    // 独上高楼望尽天涯路
string str1 = str.Remove(2);    //  获取事件地点
Console.WriteLine("事件地点为:{0}", str1);    // 独上
Console.WriteLine("原来的语句是:{0}", str);   // 独上高楼望尽天涯路

string str2 = str.Substring(3);
Console.WriteLine("截取的语句是:{0}", str2);   // 楼望尽天涯路
string str3 = str2.Remove(1, 2);  // 获取事件内容
Console.WriteLine("事件内容为:{0}", str3);     // 楼天涯路

}


 9> 赋值字符串

String类提供了Copy和CopyTo方法,用于将字符串或者子字符串复制到另一个字符串或Char类型的数组中。

 1)Copy方法

  Copy方法用于创建一个与指定字符串具有相同值的字符串(静态)

public static string Copy(string str);
str:要复制的字符串
返回值:与str具有相同值的字符串

 2)CopyTo方法

 CopyTo方法功能与 Copy方法基本相同,但是CopyTo方法可以将字符串的某一部分复制到另一数组中(实例方法)

public void CopyTo(int scoureIndex, char[] destination, int destinationIndex, int count);

scoureIndex:需要复制字符串的起始位置

destination:目标字符数组

destinationIndex:指定目标数据中的开始存放位置

count:指定要复制的字符个数

实例:

// 复制字符串
public static void test16()
{
string str = "独上高楼望尽天涯路";
Console.WriteLine("原来的语句是:{0}", str);    // 独上高楼望尽天涯路

string str1 = string.Copy(str);
Console.WriteLine("复制的语句是:{0}", str1);    // 独上高楼望尽天涯路

// copyTo
string word = "subgroup";
char[] word1 = new char[20];
word.CopyTo(3, word1, 0, 5);  // 将字符串word从索引3开始的5个字符串复制到字符串数组word1中
Console.WriteLine(word1);

}


 10> 替换字符串

String类提供了Replace方法,用于将字符串中的某个字符或者字符串替换成其它的字符或者字符串

public string Replace(char Ochar, char Nchar);
public string Replace(char Ovalue, char Nvalue);
Ochar:待替换的字符
Nchar:替换后的新字符

Ovalue:待替换的字符串

Nvalue:替换后的新字符串

实例:

// 替换字符串
public static void test17()
{
string str = "独上高楼望尽天涯路";
Console.WriteLine("原来的语句是:{0}", str);    // 独上高楼望尽天涯路

string str1 = str.Replace('独', '孤');
Console.WriteLine(str1);

string str2 = str1.Replace("天涯路", "天堂路");
Console.WriteLine(str2);
}


三、可变字符串类StringBuilder的使用

1. 一些用法

2. 与String类的区别

String对象是不可改变的,每次使用String类中的方法时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用StringBuilder类。例如,当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能。

注意:在字符串连接次数较少的情况下建议使用“+”号,如果有大量的连接操作则使用StringBuilder类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息