2012-08-03 60 views
7

目前,我有以下代码:C#转换域用户以user @ domain的

string user = @"DOMAIN\USER"; 
string[] parts = user.Split(new string[] { "\\" }, StringSplitOptions.None); 
string user = parts[1] + "@" + parts[0]; 

输入字符串user可以在两种格式之一:

DOMAIN\USER 
DOMAIN\\USER (with a double slash) 

请告诉我最优雅的方式C#转换这两种字符串之一:

[email protected] 
+1

你可以用正则表达式做。我会留下其他人来构造该正则表达式:) – podiluska 2012-08-03 14:06:17

回答

7

不知道你会调用这个最优雅:

string[] parts = user.Split(new string[] {"/"}, 
          StringSplitOptions.RemoveEmptyEntries); 
string user = string.Format("{0}@{1}", parts[1], parts[0]); 
+0

+1 - 刚刚建议'RemoveEmptyEntries' – 2012-08-03 14:06:03

+0

@Oded将“//”添加到您的数组 – 2012-08-03 14:06:55

+1

@MAfifi - 不需要,不需要'RemoveEmptyEntries'。尝试一下。 – Oded 2012-08-03 14:07:25

2

如何:

 string user = @"DOMAIN//USER"; 
     Regex pattern = new Regex("[/]+"); 
     var sp = pattern.Split(user); 
     user = sp[1] + "@" + sp[0]; 
     Console.WriteLine(user); 
+0

这不能正确处理双斜杠的情况。 – vcsjones 2012-08-03 14:10:16

+2

@vcsjones是的,它的确如此! – Mithrandir 2012-08-03 14:11:50

+0

唉,这会教我思考我理解了一段时间的正则表达式。 +1 – vcsjones 2012-08-03 14:14:14

2

在俄德的答案的变化可能会使用Array.Reverse

string[] parts = user.Split(new string[] {"/"},StringSplitOptions.RemoveEmptyEntries); 
Array.Reverse(parts); 
return String.Join("@",parts); 

或者,可以使用LINQ(基于here):

return user.Split(new string[] {"/"}, StringSplitOptions.RemoveEmptyEntries) 
     .Aggregate((current, next) => next + "@" + current); 
0

你可以试试这个:

String[] parts = user.Split(new String[] {@"\", @"\\"}, StringSplitOptions.RemoveEmptyEntries); 
user = String.Format("{0}@{1}", parts[1], parts[0]); 
0

对于添加另一种选择的原因,那就是:

string user = @"DOMAIN//USER"; 
string result = user.Substring(0, user.IndexOf("/")) + "@" + user.Substring(user.LastIndexOf("/") + 1, user.Length - (user.LastIndexOf("/") + 1)); 
相关问题