C#string.Split返回没有where的双引号

时间:2010-12-16 06:35:56

标签: c# asp.net

为什么会这样

        string test = "Text1, Text2";
        string [] tests = test.Split(", ".ToArray());

返回此

[0] = "Text1"
[1] = ""
[2] = "Text2"

测试[1]中的引号是什么?

我认为输出会像这样

[0] = "Text1"
[1] = "Text2"

5 个答案:

答案 0 :(得分:2)

LINQ扩展方法让您感到悲伤!

你会发现System.String实现IEnumerable<char>允许字符串使用任何LINQ扩展方法 - 而你正在调用TSource[] ToArray<TSource>(this IEnumerable<TSource> source)。因此,不是拆分字符串数组,而是拆分字符数组。

您的代码可以重写为:

string test = "Text1, Text2";
char[] separator = ", ".ToArray();
string[] tests = test.Split(separator);

由于您的输入包含两个彼此相邻的分隔符,因此您将在输出数组中获得空字符串。

Split上没有System.String方法,只需一个字符串作为分隔符。相反,您必须传入一个字符串分隔符数组。该方法还要求您提供StringSplitOptions参数。

所以这就是你需要打电话的地方:

string test = "Text1, Text2";
string[] separator = new [] { ", " };
string[] tests = test.Split(separator, StringSplitOptions.RemoveEmptyEntries);

答案 1 :(得分:1)

string [] tests = test.Split(new string[] { ", " });

这个怎么样?

String.ToArray()将字符串拆分为chars数组,但您需要一个字符串数组作为String.Split()的参数。

答案 2 :(得分:1)

", ".ToArray()会产生一个字符数组,如:

{ ',', ' '}  //a ',' and a space

所以有两个分隔符(与string.Split(params char[])版本匹配)。

你应该这样做:

string test = "Text1, Text2";
string[] tests = test.Split(new string[] { ", " }, 
                             StringSplitOptions.RemoveEmptyEntries);
// Updated

string test = "Text1, Text2";
string[] tests = test.Split(',');
// or: string[] tests = test.Split(new char[]{ ',' });

答案 3 :(得分:0)

您的代码

string test = "Text1, Text2";
string [] tests = test.Split(", ".ToArray());

等于

string test = "Text1, Text2";
string [] tests = test.Split(new char[2]{',',' '});

你应该使用

string test = "Text1, Text2";
string [] tests = test.Split(',');

答案 4 :(得分:0)

将ToArray()更改为ToCharArray()。