用.NET轻松分析字符串值

处理字符串值是大多数应用程序开发项目不可缺少的一部分。这常常涉及把字符串分析分解为单独的值。例如,接受来自诸如电子表格等外部数据源的数据往往会用到以一些常用格式出现的值,比如用逗号分隔的值。.NET的String类会简化提取逗号之间的各个值的过程。

提取值

String类的Split方法让你能够提取用特定字符分隔的各个值。分隔符的值被传递给方法,后者通过其第二个变体接受用第二个参数被重载,而这个参数用来指定返回的元素的最大数量。(注:你可以指定在一个字符数组里使用一个以上的分隔符。)从字符串提取出来的值被返回到String数组里。

下面是两个变量:

  • C#语言里的String.Split(char[]),或者VB.NET里的String.Split(Char())
  • C#语言里的String.Split(char[], int),或者VB.NET里的String.Split(Char(), Integer)

下面的C#代码段会利用使用逗号分隔的字符串值来填充一个数组:

string values = "TechRepublic.com, CNET.com, News.com, Builder.com, GameSpot.com";
string[] sites = values.Split(',');
foreach (string s in sites) {
Console.WriteLine(s);
}

下面就是生成的结果:

TechRepublic.com
CNET.com
News.com
Builder.com
GameSpot.com

相应的VB.NET代码是:

Dim values As String
values = "TechRepublic.com, CNET.com, News.com, Builder.com, GameSpot.com"
Dim sites As String() = Nothing
sites = values.Split(",")
Dim s As String
For Each s In sites
Console.WriteLine(s)
Next s

你也可以指定多个分隔符,放在一个字符数组里。下面的代码会用逗号、冒号或者分号来分割字符串的值。此外,它用到了可选的第二个参数,把返回的值的最大数量设置为4。

char[] sep = new char[3];
sep[0] = ',';
sep[1] = ':';
sep[2] = ';';
string values = "TechRepublic.com: CNET.com, News.com, Builder.com; GameSpot.com";
string[] sites = values.Split(sep, 4);
foreach (string s in sites) {
Console.WriteLine(s);
}

下面就是生成的结果(注意,第二个参数把字符串剩下的部分放在最后的数组元素里):

TechRepublic.com
CNET.com
News.com
Builder.com; GameSpot.com

相应的VB.NET代码是:

Dim values As String
values = "TechRepublic.com: CNET.com, News.com, Builder.com; GameSpot.com"
Dim sites As String() = Nothing
Dim sep(3) As Char
sep(0) = ","
sep(1) = ":"
sep(2) = ";"
sites = values.Split(sep, 4)
Dim s As String
For Each s In sites
Console.WriteLine(s)
Next s

尽管Split方法可以让你很容易使用字符串值里的各个元素,但是你可能还是需要根据预先定义的格式(比如用逗号分隔的值)来格式化所有的值。String类使得合成正确格式的字符串变得很容易。

合成字符串

String类的Join方法将用作分隔符的字符接受为第一个参数。要被接在一起的值被当作第二个参数以字符串数组的形式传递。它有一个重载方法签名,能够将整数值接受为第三个和第四个参数。第三个参数用来指定要使用的第一个数组元素,而最后一个参数是要使用的元素的总数。

下面的C#代码示例说明了合成前面示例里字符串值的过程:

string sep = ", ";
string[] values = new String[5];
values[0] = "TechRepublic.com";
values[1] = "CNET.com";
values[2] = "News.com";
values[3] = "Builder.com";
values[4] = "GameSpot.com";
string sites = String.Join(sep, values);
Console.Write(sites);

下面是生成的结果:

TechRepublic.com, CNET.com, News.com, Builder.com, GameSpot.com

相应的VB.NET代码是:

Dim sep As String
sep = ", "
Dim values(4) As String
values(0) = "TechRepublic.com"
values(1) = "CNET.com"
values(2) = "News.com"
values(3) = "Builder.com"
values(4) = "GameSpot.com"
Dim sites As String
sites = String.Join(sep, values)
Console.Write(sites)

我们可以使用重载格式来指定从哪里开始,以及结果中需要包含多少个元素。下面的示例从第二个开始(要注意的是,元素的编号是从0开始的),并最多返回三个元素:

Dim sep As String
sep = ", "
Dim values(4) As String
values(0) = "TechRepublic.com"
values(1) = "CNET.com"
values(2) = "News.com"
values(3) = "Builder.com"
values(4) = "GameSpot.com"
Dim sites As String
sites = String.Join(sep, values, 2, 3)
Console.Write(sites)

元素的起始编号以及返回的最大数量必须是在所使用的字符串数组的范围内。如果这两者都不正确(也就是说,超出了数组的范围),那么就会出现异常。因此,使用try/catch来处理碰到的问题是个好主意。

尽管String类提供了必要的方法,但是它并不是用来分析字符串值的唯一方式。另外一种常用的方式利用的正则表达式。

原文地址:https://www.cnblogs.com/Apollo/p/347928.html