C#基础语法——使用字符串

(一)使用字符串

C# 字符串是使用 string 关键字声明的一个字符数组。字符串是使用引号声明的,如下例所示:

C#
--------------------------------------------------------------------------------
 

string s = "Hello, World!";

 

您可以提取子字符串和连接字符串,如下所示:

C#
--------------------------------------------------------------------------------
 

复制代码
1 string s1 = "orange";
2 string s2 = "red";
3 
4 s1 += s2;
5 System.Console.WriteLine(s1); // outputs "orangered"
6 
7 s1 = s1.Substring(25);
8 System.Console.WriteLine(s1); // outputs "anger"
9 
复制代码


 

字符串对象是“不可变的”,即它们一旦创建就无法更改。对字符串进行操作的方法实际上返回的是新的字符串对象。在前面的示例中,将 s1 和 s2 的内容连接起来以构成一个字符串时,包含 "orange" 和 "red" 的两个字符串均保持不变。 += 运算符会创建一个包含组合内容的新字符串。结果是 s1 现在引用一个完全不同的字符串。只包含 "orange" 的字符串仍然存在,但连接 s1 后将不再被引用。

因此,出于性能方面的原因,大量的连接或其他涉及字符串的操作应当用 StringBuilder 类执行,如下所示:

C#
--------------------------------------------------------------------------------
 

System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(
"one ");
sb.Append(
"two ");
sb.Append(
"three");
string str = sb.ToString();

 

StringBuilder 类在“使用 Stringbuilder”一节中有进一步的讨论。

使用字符串
转义符
字符串中可以包含转义符,如“\n”(新行)和“\t”(制表符)。行:

C#
--------------------------------------------------------------------------------
 

string hello = "Hello\nWorld!";


 

等同于:

Hello

World!

如果希望包含反斜杠,则它前面必须还有另一个反斜杠。下面的字符串:

C#
--------------------------------------------------------------------------------
 

string filePath = "\\\\My Documents\\";


 

实际上等同于:

\\My Documents\

@ 符号
@ 符号会告知字符串构造函数忽略转义符和分行符。因此,以下两个字符串是完全相同的:

C#
--------------------------------------------------------------------------------
 

string p1 = "\\\\My Documents\\My Files\\";
string p2 = @"\\My Documents\My Files\";
 

ToString()
如同所有从 Object 派生的对象一样,字符串也提供了 ToString 方法,用于将值转换为字符串。此方法可用于将数值转换为字符串,如下所示:

C#
--------------------------------------------------------------------------------
 

int year = 1999;
string msg = "Eve was born in " + year.ToString();
System.Console.WriteLine(msg); 
// outputs "Eve was born in 1999"


 

访问各个字符
字符串中所包含的各个字符可以使用以下方法进行访问,如 SubString() 、 Replace(), 、 Split() 和 Trim() 。

C#
--------------------------------------------------------------------------------
 

string s3 = "Visual C# Express";

System.Console.WriteLine(s3.Substring(
72)); // outputs "C#"
System.Console.WriteLine(s3.Replace("C#""Basic")); // outputs "Visual Basic Express"


 

也可以将字符复制到字符数组,如下所示:

C#
--------------------------------------------------------------------------------
 

复制代码
string s4 = "Hello, World";
char[] arr = s4.ToCharArray(0, s4.Length);

foreach (char c in arr)
{
System.Console.Write(c); 
// outputs "Hello, World"
}
复制代码


 

可以用索引访问字符串中的各个字符,如下所示:

C#
--------------------------------------------------------------------------------
 

Code


 

更改大小写
若要将字符串中的字母更改为大写或小写,可以使用 ToUpper() 或 ToLower() ,如下所示:

C#
--------------------------------------------------------------------------------
 

Code


 

比较
比较两个字符串的最简单方法是使用 == 和 != 运算符,执行区分大小写的比较。

C#
--------------------------------------------------------------------------------
 

Code


 

字符串对象也有一个 CompareTo() 方法,它根据某个字符串是否小于 (<) 或大于 (>) 另一个,返回一个整数值。比较字符串时使用 Unicode 值,小写的值小于大写的值。

C#
--------------------------------------------------------------------------------
 

复制代码
string s7 = "ABC";
string s8 = "abc"
if (s7.CompareTo(s8) > 0)
{
System.Console.WriteLine(
"Greater-than");
}
else
{
System.Console.WriteLine(
"Less-than");
}
 
复制代码

若要在一个字符串中搜索另一个字符串,可以使用 IndexOf() 。如果未找到搜索字符串, IndexOf() 返回 -1;否则,返回它出现的第一个位置的索引(从零开始)。

C#
--------------------------------------------------------------------------------
 

string s9 = "Battle of Hastings, 1066";

System.Console.WriteLine(s9.IndexOf(
"Hastings")); // outputs 10
System.Console.WriteLine(s9.IndexOf("1967")); // outputs -1


 

将字符串拆分为子字符串
将字符串拆分为子字符串(如将句子拆分为各个单词)是一个常见的编程任务。 Split() 方法使用分隔符(如空格字符) char 数组,并返回一个子字符串数组。您可以使用 foreach 访问此数组,如下所示:

C#
--------------------------------------------------------------------------------
 

char[] delimit = new char[] { ' ' };
string s10 = "The cat sat on the mat.";
foreach (string substr in s10.Split(delimit))
{
System.Console.WriteLine(substr);
}


 

此代码将在单独的行上输出每个单词,如下所示:

The

cat

sat

on

the

mat.

使用 StringBuilder
StringBuilder 类创建了一个字符串缓冲区,用于在程序执行大量字符串操作时提供更好的性能。 StringBuilder 字符串还允许您重新分配个别字符,这些字符是内置字符串数据类型所不支持的。例如,此代码在不创建新字符串的情况下更改了一个字符串的内容:

C#
--------------------------------------------------------------------------------
 

System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet");
sb[
0= 'C';
System.Console.WriteLine(sb.ToString());
System.Console.ReadLine();

在本示例中, StringBuilder 对象用于从一组数值类型中创建字符串:

C#
--------------------------------------------------------------------------------
 

复制代码
class TestStringBuilder
{
static void Main()
{
System.Text.StringBuilder sb 
= new System.Text.StringBuilder();

// Create a string composed of numbers 0 - 9
for (int i = 0; i < 10; i++)
{
sb.Append(i.ToString());
}
System.Console.WriteLine(sb); 
// displays 0123456789

// Copy one character of the string (not possible with a System.String)
sb[0= sb[9];

System.Console.WriteLine(sb); 
// displays 9123456789
}

复制代码


 

(二)如何:使用 Split 方法分析字符串

下面的代码示例演示如何使用 System.String.Split 方法分析字符串。此方法返回一个字符串数组,其中每个元素是一个单词。作为输入, Split 采用一个字符数组指示哪些字符被用作分隔符。本示例中使用了空格、逗号、句点、冒号和制表符。一个含有这些分隔符的数组被传递给 Split ,并使用结果字符串数组分别显示句子中的每个单词。

示例
C#
--------------------------------------------------------------------------------
 

Code


 

输出
Original text: 'one two three:four,five six seven'

7 words in text:

one

two

three

four

five

six

seven

 

(三)如何:使用字符串方法搜索字符串

string 类型(它是 System.String 类的别名)为搜索字符串的内容提供了许多有用的方法。下面的示例使用 IndexOf 、 LastIndexOf 、 StartsWith 和 EndsWith 方法。

C#
--------------------------------------------------------------------------------
 

Code

 

输出
'A silly sentence used for silly purposes.' starts with 'a silly'? False starts with 'a silly'? True (ignore case) ends with '.'? True between two 'silly' words: 'silly sentence used for '

 

(四)如何:使用正则表达式搜索字符串

可以使用 System.Text.RegularExpressions.Regex 类搜索字符串。这些搜索可以涵盖从非常简单到全面使用正则表达式的复杂范围。以下是使用 Regex 类搜索字符串的两个示例。有关更多信息,请参见 .NET Framework 正则表达式 。

示例
以下代码是一个控制台应用程序,用于对数组中的字符串执行简单的不区分大小写的搜索。给定要搜索的字符串和包含搜索模式的字符串后,静态方法 System.Text.RegularExpressions.Regex.IsMatch(System.String,System.String,System.Text.RegularExpressions.RegexOptions) 执行搜索。在本例中,使用第三个参数指示忽略大小写。有关更多信息,请参见 System.Text.RegularExpressions.RegexOptions 。

C#
--------------------------------------------------------------------------------
 

复制代码
class TestRegularExpressions
{
static void Main()
{
string[] sentences = 
{
"cow over the moon",
"Betsy the Cow",
"cowering in the corner",
"no match here"
};

string sPattern = "cow";

foreach (string s in sentences)
{
System.Console.Write(
"{0,24}", s);

if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
System.Console.WriteLine(
" (match for '{0}' found)", sPattern);
}
else
{
System.Console.WriteLine();
}
}
}
}

复制代码

 

输出
cow over the moon (match for 'cow' found) Betsy the Cow (match for 'cow' found) cowering in the corner (match for 'cow' found) no match here

 

以下代码是一个控制台应用程序,此程序使用正则表达式验证数组中每个字符串的格式。验证要求每个字符串具有电话号码的形式,即用短划线将数字分成三组,前两组各包含三个数字,第三组包含四个数字。这是通过正则表达式 ^\\d{3}-\\d{3}-\\d{4}$ 完成的。有关更多信息,请参见 正则表达式语言元素 。

Code

 

输出
123-456-7890 - valid

444-234-22450 - invalid

690-203-6578 - valid

146-893-232 - invalid

146-839-2322 - valid

4007-295-1111 - invalid

407-295-1111 - valid

407-2-5555 - invalid

 

(四)如何:修改字符串内容

字符串是不可变的,因此不能修改字符串的内容。但是,可以将字符串的内容提取到非不可变的窗体中,并对其进行修改,以形成新的字符串实例。

示例
下面的示例使用 ToCharArray 方法来将字符串的内容提取到 char 类型的数组中。然后修改此数组中的某些元素。之后,使用 char 数组创建新的字符串实例。

C#
--------------------------------------------------------------------------------
 

Code

 

输出
The quick brown fox jumped over the fence

The quick brown cat jumped over the fence


 

posted @   Mating_luo  阅读(1157)  评论(0)    收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示