1

文字列を 2 回分割しようとしましたが、「インデックスが配列の範囲外でした」というエラーが表示され続けます。

これは、分割する予定の文字列です。

"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

1行ですべてを行う

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

2 番目のループは 5 回同じことを行います (使用しませんe)。

あなたが得た例外は、最後の空の文字列が含まれていたため、空の配列になり、内側のループで範囲外のインデックス例外が発生したためです。

于 2013-03-16T07:51:03.453 に答える
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

最後のループで 1 つのアイテムしか取得していないため、例外が発生Index was outside the bounds of the arrayしています。5 つのアイテムを確認することをお勧めします。

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 に答える