数组 3个月前

编程语言
661
数组

字符串的处理

到目前为止,对字符串的使用还仅限于把字符串写到控制台上,从控制台上读取字符串,以及使用 + 运算符连接字符串。在编写较有趣的应用程序时,会发现字符串的操作非常多。所以,下面占用几页的篇幅介绍C#中较常用的字符串处理技巧。

首先要注意,string 类型变量可以看成是 char 变量的** 只读数组** 。这样,就可以使用下面的语法访问每个字符:

string myString = "A string";
char myChar = myString[1];

但不能采用这种方式为各个字符赋值。为了获得一个可写的 char 数组,可以使用下面的代码,其中使用了数组变量 ToCharArray() 命令:

string myString = "A string";
char[] myChars = myString.ToCharArray();

接着就可以采用标准方式处理 char 数组了。也可以在 foreach 循环中使用字符串,例如:

foreach(char character in myString)
{
    Console.WriteLine("{0}", character);
}

与数组一样,还可以使用 myString.Length 获取元素的个数,这将给出字符串中的字符数,例如:

string myString = Console.ReadLine();
Console.WriteLine("You typed {0} characters", myString.Length);

其他基本字符串处理技巧采用与这个 <string > .ToCharArray() 命令类似的格式使用命令。两个简单却有效的命令是 <string > .ToLower()<string > .ToUpper()。它们可以分别把字符串转换为小写或大写形式。要明白为什么它们非常有用,可以考虑下面的情形:要检查用户的某个响应,例如字符串 yes。如果可以把用户输入的字符串转换为小写形式,就也能检查字符串 YESYesyeS 等,第 4 章介绍了这样一个示例:

string userResponse = Console.ReadLine();
if (userResponse.ToLower() == "yes")
{
    // Act on response
}

注意 ⚠️,这个命令与本节的其他命令一样,并未真正改变应用它的字符串。把这个命令与字符串结合使用,就会创建一个新的字符串,以便与另一个字符串进行比较(如上所述),或者赋给另一个变量。该变量可以是当前操作的变量,例如:

userResponse = userResponse.ToLower();

记住这一点很重要,因为只写出下面的代码是没用的:

userResponse.ToLower();

下面看看在简化用户输入方面还可以做什么。如果用户无意间在输入内容的前面或后面添加了多余的空格,会怎样?此时,上述代码就不起作用了。这就需要删除输入字符串中的空格,此时可以使用 <string > .Trim() 命令来处理。

string userResponse = Console.ReadLine();
userResponse = userResponse.Trim();
if (userResponse.ToLower() == "yes")
{
    // Act on response.
}

使用该命令,还可以检测如下的字符串:

" YES"
"Yes "

也可以使用这些命令删除其他字符,只要在一个 char 数组中指定这些字符即可,例如:

char[] trimChars = { ' ', 'e', 's' };
string userResponse = Console.ReadLine();
userResponse = userResponse.ToLower();
userResponse = userResponse.Trim(trimChars);
if (userResponse == "y")
{
    // Act on response.
}

这些删除字符串前面或后面的所有空格、字母 es。如果字符串中没有其他字符,就会检测以下字符串:

"Yeeeees"
" y"

还可以使用 <string > .TrimStart()<string > .TrimEnd() 命令,它们可以把字符串前面或后面的空格删掉。使用这些命令时也可以指定 char 数组。

还有另外两个字符串命令可以处理字符串的空格:<string > .PadLeft()<string > .PadRight()。它们可以在字符串的左边或右边添加空格,使字符串达到指定的长度。其语法如下:

<string>.PadX(<desiredLength>);

例如:

myString = "Aligned";
myString = myString.PadLeft(10);

这将在 myString 中把 3 个空格添加到单词 aligned 的左边。这些方法可以用于在列中对齐字符串,特别适用于放置包含数字的字符串。

与修整命令一样,还可以按第二种方式使用这些命令,即提供要添加到字符串上的字符。但是这需要一个 char,而不是像修整命令那样指定一个 char 数组。例如:

myString = "Aligned";
myString = myString.PadLeft(10, '-');

这将在 myString 的开头加上 3 个短横线。

还有许多这样的字符串处理命令,其中一些只用于非常特殊的情况,在后面的章节中遇到它们时再进行讨论。在继续下面内容之前,介绍 Visual Studio 2013 中的一个特性,前几章曾提及(特别是本章)这个特性。下面的示例会试验语句自动完成功能,IDE通过这种功能给出用户有可能要插入的代码。

在 Program.cs 中输入下列代码,注意输入过程中弹出的窗口:

static void Main(string[] args)
{
    string myString = "This is a test.";
    char[] separator = { ' ' };
    string[] myWords;
    myWords = myString.
}

输入最后的句点时,注意会弹出如图所示的窗口。

image

不要移动光标,键入 sp,弹出窗口就会改变,显示一个工具提示窗口,如图 所示。

image

输入字符 “(se”,会弹出另外一个窗口和工具提示,如图所示。

image

输入两个字符 ");",代码如下所示,弹出窗口随之消失。

static void Main(string[] args)
{
    string myString = "This is a test.";
    char[] separator = { ' ' };
    string[] myWords;
    myWords = myString.Split(separator);
}

添加如下代码,注意弹出的窗口。

static void Main(string[] args)
{
    string myString = "This is a test.";
    char[] separator = { ' ' };
    string[] myWords;
    myWords = myString.Split(separator);
    foreach(string word in myWords)
    {
        Console.WriteLine("{0}", word);
    }
    Console.ReadKey();
}

示例的说明

在这段代码中,要注意两点。第一点是所使用的新字符串命令,第二点是使用了自动完成功能。使用命令 <string > .Split()string 转换为 string 数组,把它在指定的位置分隔开。这些位置采用 char 数组形式,在本例中该数组只有一个元素,即空格字符:

char[] separator = { ' ' };

下面的代码把字符串在每个空格处分解开,并获取得到的子字符串,即得到包含单个单词的数组:

string[] myWords;
myWords = myString.Split(separator);

接着使用 foreach 循环迭代这个数组中的单词,并把这些单词写到控制台上:

foreach(string word in myWords)
{
    Console.WriteLine("{0}", word);
}

得到的每个单词都没有空格,单词的内部和两端都没有空格。在使用 Split() 时,删除了分隔符。

接着分析一下自动完成功能。VS 是智能化极高的程序包,在用户键入代码时会提供许多关于代码的信息。即使在一个新行上键入第一个字符,IDE 也试图帮助用户,列出建议的关键字、变量名、类型名等。只要在上面的代码输入 3 个字母 str,IDE 就会猜出要输入 string。在键入变量名时,这个功能会更有用。在较长的代码中,常会忘记要使用的变量名。IDE 会在用户键入代码的过程中弹出一系列变量名,用户可从中选择,不必查看以前的代码。

myString 的后面键入句点时,IDE 知道 myString 是一个字符串,也知道你要指定一个字符串命令,于是显示可用选项。此时可以停止键入,使用上下箭头键选择需要的命令。在这些可用命令中移动时,IDE 会告诉你当前选中命令的含义,以及使用它的语法。

在开始键入更多字符时,IDE 会自动把它猜测你可能要使用的命令移到命令列表的顶部。一旦它显示出需要的命令,就可以继续键入,就像已经键入完整的名称一样,所以键入 “(” 会直接跳到为某些命令指定需要的额外信息的地方--IDE 甚至会告诉用户该信息必须采用的格式,并显示这些接受各种信息的命令选项。

IDE 的这项功能(也称为 IntelliSense)使用起来非常方便,可以使你轻松地找到奇怪类型的信息。查看 string 类型的所有命令时很有趣的,这不会使计算机崩溃,试一试吧!

有时所显示的信息会遮挡前面已经键入的代码,这是很恼人的,因为在键入时可能需要参考被遮挡的代码。此时可按下 Ctrl 键,使命令列表变成透明的,以便查看被遮挡的代码。

image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2222820
累计阅读

热门教程文档

Golang
23小节
Vue
25小节
QT
33小节
CSS
33小节
Docker
62小节