0

次のような文字列値があります。

string strRole = "ab=Admin,ca=system,ou=application,role=branduk|ab=Manager,ca=system,ou=application,role=brankdusa|ab=sale,ca=system,ou=application,role=brandAu";

ロールを文字列配列に取得するだけです。C# 4.0 で文字列を分割する最良の方法があるのだろうか

string[] arrStrRole = strRole.Split('|').Select .. ??

基本的には、string[] arrStrRole に brandUK、brandUsa、brandAu が必要です。ありがとう。

4

6 に答える 6

0

このような拡張機能を使用すると、簡単にテストできます。

 public static string[] ParseRolesIntoList(this string csvGiven)
            {
                var list = new List<string>();
                if (csvGiven == null) return null;
                var csv = csvGiven.Split(',');
                foreach (var s in csv)
                {
                    if (string.IsNullOrEmpty(s)) continue;
                    if(!s.StartsWith("role")) continue;
                    var upperBound =  s.IndexOf("|");
                    if (upperBound <= 0) upperBound = s.Length;
                    var role = s.Substring(s.IndexOf("=") + 1, 
                                        upperBound - s.IndexOf("=") - 1);
                    list.Add(role);
                }
                return list.ToArray();
            }

以下のテストで、例にbrankdusaのタイプミスが見つかりました。他の回答のいくつかは、brandAuの一致がわずかに異なるため、brandAuを扱いません。必要に応じて、これらに対してこのテストを実行してみてください

  [Test]
    public void Should_parse_into_roles()
    {
        //GIVEN 
        const string strRole = "ab=Admin,ca=system,ou=application,role=branduk|ab=Manager,ca=system,ou=application,role=brankdusa|ab=sale,ca=system,ou=application,role=brandAu";

        //WHEN
        var roles = strRole.ParseRolesIntoList();

        //THEN
        Assert.That(roles.Length, Is.EqualTo(3));
        Assert.That(roles[0], Is.EqualTo("branduk"));
        Assert.That(roles[1], Is.EqualTo("brankdusa"));
        Assert.That(roles[2], Is.EqualTo("brandAu"));
    }
于 2012-10-08T08:59:57.720 に答える
0
string[] arrStrRole = strRole.Split('|').Select(r => r.Split(new []{"role="}, StringSplitOptions.None)[1]).ToArray()

結果は、3つの文字列を持つ文字列配列になります。

branduk
brankdusa
brandAu

于 2012-10-08T09:00:04.520 に答える
0

文字列を分割するのでRegexはなく、使用します。意図したSelectソリューションと組み合わせると、次のようになります。

var roles = Regex.Matches(strRole, @"role=(\w+)")
                 .Cast<Match>()
                 .Select(x => x.Groups[1].Value).ToArray();
于 2012-10-08T09:05:23.380 に答える
0

これにより、3 つの値の配列が得られます。

void Main()
{
  string strRole = "ab=Admin,ca=system,ou=application,role=branduk|ab=Manager,ca=system,ou=application,role=brankdusa|ab=sale,ca=system,ou=application,role=brandAu";

  var arrStrRole = strRole.Split('|',',')
                     .Where(a => a.Split('=')[0] == "role")
                     .Select(b => b.Split('=')[1]);

  arrStrRole.Dump();
}
于 2012-10-08T09:34:03.597 に答える
0

使用できstring[] arrStrRole = strRole.Split('|',','); 、これは | に従って分割されます。と 、文字

于 2012-10-08T08:57:22.353 に答える
0

String.SplitこのLINQクエリで使用できます。

var roles = from token in strRole.Split('|')
            from part in token.Split(',')
            where part.Split('=')[0] == "role"
            select part.Split('=')[1];

これはまだエラーが発生しやすく、データが常にこの形式である必要があることに注意してください。あなたがから始めたので、私はそれについて言及しますSplit('|').Select...。ネストされたループを使用することもできます。

String[]電話するだけで必要な場合ToArray

String[] result = roles.ToArray();
于 2012-10-08T09:00:34.367 に答える