2013-07-04 60 views
2

有很长的字符串被分隔符分隔。分隔符可以改变,但有一些固定的设置。我想提取分隔符来执行分割操作。从长字符串获取分隔符以分割

String sLongName = "abc1234646;dfsdfsdfsdf44654654;asdfsdsdf;sadfsdfs446"; 

该组分隔符是{";" "," "/" "$"}

所以,我怎样才能在运行时哪一个是上面的设置中使用的字符串

+0

你不能全部使用它们吗? 'sLongName.Split(new string [] {“;”,“,”,“/”,“$”});' –

+0

我可以,但是到目前为止,这个列表如果增加的话会很小,它会对性能造成任何影响。 .. – ankur

回答

4

你的意思是找到其中的分隔符的一个字符串中出现?

char[] delimiters = new char[] { ';', ',', '/', '$' }; 
char? usedDelimiter = delimiters.FirstOrDefault(d => sLongName.IndexOf(d) != -1); 

假设该字符串包含分隔符的只是一个(或无),你可以用随后又被分割:

string[] splitString; 
if (usedDelimiter != null) 
    splitString = sLongName.Split(usedDelimiter.Value); 
else 
    splitString = new string[] { sLongName }; 
+0

如果OP关注的是性能,那么就会比在所有有效的分隔符上调用split更糟!他们都是'O(n)',但这有一个更糟糕的常数! – jason

+0

@Jason:这取决于使用相应分隔符的频率是否存在偏差。如果在90%的字符串中使用';'作为分隔符,那么在平均情况下,上述可能会执行得更快。 (是的,这是一个费力的理由;我的观点是,这个问题并没有真正提供关于性能要求的任何信息。) – Douglas

+0

评论并非针对你;你的答案很好。这是针对OP的,因为他在他的评论中提出了表现问题。 – jason

1

是否有你不能只拆分在一切的原因分开的分隔符?

var fields = sLongName.Split(new string[] { ";", ",", "/", "$"}); 
+0

我发表了相同的评论。 – ankur

+0

@ankur:表现?非问题,几乎肯定。不要猜测。测量。 – jason

2

您可以对所有的分隔符的分裂:

char[] delimiters = new char[] { ';',',','/','$' }; 
string[] parts = value.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); 
0

假设,分隔符永远不会“正常”的文本内使用,你可以

Char[] dels = new Char [] {';', ',', '/', '$'}; 
Char del='\0'; 
foreach (Char c in dels) 
    if (sLongName.IndexOf(c)>=0) 
    { 
     del=c; 
     break; 
    } 
if (del=='\0') throw new InvalidOperationException("I'm afraid, I can't do this, Chris!"); 
//del is now your delimiter.