c#字符串分隔符

时间:2012-10-08 08:51:54

标签: c#-4.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 .. ??

基本上,我需要brandUK,brandUsa,brandAu到string [] arrStrRole。 感谢。

6 个答案:

答案 0 :(得分:0)

您可以使用string[] arrStrRole = strRole.Split('|',',');,这将根据|分割和,字符

答案 1 :(得分: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打交道,因为它的匹配略有不同。如果您愿意,可以尝试对它们运行此测试

  [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"));
    }

答案 2 :(得分:0)

string[] arrStrRole = strRole.Split('|').Select(r => r.Split(new []{"role="}, StringSplitOptions.None)[1]).ToArray()

产生一个包含三个字符串的字符串数组:

  

branduk
  brankdusa
  brandAu

答案 3 :(得分: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();

答案 4 :(得分:0)

我会选择Regex而不是拆分字符串。结合您的预期Select解决方案,它可能如下所示:

var roles = Regex.Matches(strRole, @"role=(\w+)")
                 .Cast<Match>()
                 .Select(x => x.Groups[1].Value).ToArray();

答案 5 :(得分: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();
}