如何拆分字符串TWICE

时间:2013-03-16 07:37:07

标签: c# split string-split

我一直试图将字符串拆分两次,但我不断收到错误“索引超出了数组的范围”。

这是我打算拆分的字符串:

"a*b*c*d*e^1*2*3*4*5^e*f*g*h*i^"

这样我在第一个数组分隔中使用"^"作为分隔符,以便在第一个结果之后每个集合看起来如下

a*b*c*d*e 1*2*3*4*5 e*f*g*h*i

然后在此集合上执行另一个拆分操作,*作为分隔符,以便结果,例如第一个集合中的结果为a b c d e

这是C#代码:

words = "a*b*c*d*e^1*2*3*4*5^e*f*g*h*i^";

char[] del = { '^' };

string[] splitResult = words.Split(del);
foreach (string w in splitResult)
{
    char[] separator = { '*' };
    string[] splitR = w.Split(separator);
    foreach (string e in splitR)
    {
        string first = splitR[0];
        string second = splitR[1];
        string third = splitR[2];
        string fourth = splitR[3];
        string fifth = splitR[4];
    }
}

7 个答案:

答案 0 :(得分:5)

要删除没有结果的最后一部分,

怎么样?

在C#中

string str = "a*b*c*d*e^1*2*3*4*5^e*f*g*h*i^";
var result = str.Split(new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries)
                .Select(x => x.Split('*')).ToArray();

在VB.Net

Dim str As String = "a*b*c*d*e^1*2*3*4*5^e*f*g*h*i^"
Dim result = str.Split(New Char() {"^"}, StringSplitOptions.RemoveEmptyEntries)
                .Select(Function(x) x.Split("*")).ToArray()

答案 1 :(得分:2)

您可以使用Linq执行此操作:

IEnumerable<IEnumerable<string>> strings = words
    .Split(new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(w => w.Split('*'));

或者如果您更喜欢仅使用数组

string[][] strings = words
    .Split(new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(w => w.Split('*').ToArray())
    .ToArray();

答案 2 :(得分:0)

 string words= "a*b*c*d*e^1*2*3*4*5^e*f*g*h*i^";
 string[] reslts = words.Split(new char[] { '*', '^' }, StringSplitOptions.RemoveEmptyEntries);

答案 3 :(得分:0)

你有一个终止分隔符,所以最后的字符串是空的。

If (w != null) {                   
string[] splitR = w.Split(separator);
      If splitR.lenght > 4)
      {
               string first = splitR[0];
               string second = splitR[1];
               string third = splitR[2];
               string fourth = splitR[3];
               string fifth = splitR[4];
    }
 }

答案 4 :(得分:0)

你得到异常Index was outside the bounds of the array,因为在最后一个循环中,它只获得一个项目,我建议你检查五个项目:

words = "a*b*c*d*e^1*2*3*4*5^e*f*g*h*i^";
char[] del = { '^' };

string[] splitResult = words.Split(del);
foreach (string w in splitResult)
{
    char[] separator = { '*' };
    string[] splitR = w.Split(separator);
    if (splitR.Length>=5)
    {
        foreach (string e in splitR)
        {
            string first = splitR[0];
            string second = splitR[1];
            string third = splitR[2];
            string fourth = splitR[3];
            string fifth = splitR[4];
        } 
    }
}

答案 5 :(得分:0)

试试这个:

string words = "a*b*c*d*e^1*2*3*4*5^e*f*g*h*i^";

char[] del = { '^' };

string[] splitResult = words.Split(del,StringSplitOptions.RemoveEmptyEntries);
foreach (string w in splitResult)
{
    char[] separator = { '*' };
    string[] splitR = w.Split(separator);
    if(splitR.Length==5)
    {
        string first = splitR[0];
        string second = splitR[1];
        string third = splitR[2];
        string fourth = splitR[3];
        string fifth = splitR[4];

        Console.WriteLine("{0},{1},{2},{3},{4}", first, second, third, fourth, fifth);
    }
}

答案 6 :(得分:0)

一行完成所有

var f = words.Split(new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries)
             .Select(x => x.Split(new char[] { '*' }).ToArray())
             .ToArray();

你的第二个循环做了5次同样的事情(你不使用e)。

你得到的异常是因为包含了一个最后一个空字符串,导致一个空数组,使得内部循环中的索引超出了范围异常。