4

我有这个:

String s = "abcd,efgh,ijkl";

我想以编程方式将其转换为:

String[,] s = {{"ab","cd"},{"ef","gh"},{"ij","kl"}};

字符串可以是可变长度的。谁能告诉我该怎么做?

4

3 回答 3

6

拆分成String[][]可以这样完成:

var res = s.Split(',')
    .Select(p => Regex.Split(p, "(?<=\\G.{2})"))
    .ToArray();

转换为String[,]需要一个额外的循环:

var twoD = new String[res.Length,res[0].Length];
for (int i = 0 ; i != res.Length ; i++)
    for (int j = 0 ; j != res[0].Length ; j++)
        twoD[i,j] = res[i][j];

2D 部分要求所有由 分隔的字符串,具有相同的长度。res另一方面,数组的数组可以是“锯齿状的”,即行可以有不同的长度。

于 2012-10-27T16:02:20.037 回答
4

做这个

using System.Linq;

var s = "ab,cd;ef,gh;ij,kl";
var a = s.Split(';').Select(x=>x.Split(',')).ToArray()

或扩展方法

var a = "ab,cd;ef,gh;ij,kl".ToTwoDimArray();

public static class StringExtentions
{
    public static string[][] ToTwoDimArray(this string source, char separatorOuter = ';', char separatorInner = ',')
    {
        return source
               .Split(separatorOuter)
               .Select(x => x.Split(separatorInner))
               .ToArray();
    }
}
于 2014-09-30T16:15:22.180 回答
2

你可以用 LINQ 做到这一点

 s.Split(',').Select(
             x => new string[2] { x.Substring(0, 2), x.Substring(2, 2)}
 ).ToArray();

或者你可以选择循环

        String s = "abcd,efgh,ijkl";
        var l = new List<string[]>();
        for (int i = 0; i < s.Length; i += 5)
            l.Add(new string[2] { s.Substring(i, 2), s.Substring(i + 2, 2) });

        String[][] sa = l.ToArray();
于 2012-10-27T15:56:46.657 回答