1

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

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

"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];
    }
}
4

7 回答 7

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()
于 2013-03-16T07:44:27.747 回答
4

你可以用 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();
于 2013-03-16T07:42:51.790 回答
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);
于 2013-03-16T07:43:50.850 回答
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];
    }
 }
于 2013-03-16T07:44:16.040 回答
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];
        } 
    }
}
于 2013-03-16T07:47:19.797 回答
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);
    }
}
于 2013-03-16T07:48:06.897 回答
0

一条线搞定一切

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

您的第二个循环执行 5 次相同的操作(您不使用e)。

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

于 2013-03-16T07:51:03.453 回答