我有这样的字符串值:
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。 感谢。
答案 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();
}