C# 从要拆分的长字符串中获取分隔符

C# 从要拆分的长字符串中获取分隔符,c#,C#,有分隔符分隔的长字符串。分隔符可以更改,但有一些固定的设置。我想提取分隔符以执行拆分操作 String sLongName = "abc1234646;dfsdfsdfsdf44654654;asdfsdsdf;sadfsdfs446"; 分隔符集是{;”,“/”$”} 那么,如何在运行时获取分隔符,在上述集合中使用哪一个分隔符来分隔字符串呢 var fields = sLongName.Split(new string[] { ";", ",", "/", "$"}); 您可以在所有分隔

有分隔符分隔的长字符串。分隔符可以更改,但有一些固定的设置。我想提取分隔符以执行拆分操作

String  sLongName = "abc1234646;dfsdfsdfsdf44654654;asdfsdsdf;sadfsdfs446";
分隔符集是
{;”,“/”$”}


那么,如何在运行时获取分隔符,在上述集合中使用哪一个分隔符来分隔字符串呢

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

您可以在所有分隔符上拆分:

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

是否要查找字符串中出现的分隔符之一

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 };

假设“普通”文本中从未使用分隔符,则可以

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.

你不能全部使用吗<代码>sLongName.Split(新字符串[]{;”,“,”,“/”,“$”})我可以,但现在列表很小,如果它增加,会不会对性能造成影响…我已经发表了相同的评论。@ankur:performance?几乎可以肯定,这不是问题。别猜了。如果OP关心的是性能,那么这比在所有有效分隔符上调用split的性能要差!它们都是
O(n)
,但这有一个更糟糕的常数@杰森:这取决于使用相应分隔符的频率是否存在偏差。如果,比如说,
作为分隔符,则在一般情况下,上述方法的执行速度可能会更快。(是的,这是一个费力的理由;我的观点是,这个问题实际上没有提供任何关于性能要求的信息。)评论不是针对你的;你的回答很好。这是针对OP的,因为他在评论中提到了性能问题。这很公平。我同意这感觉像是一个过早优化的案例(除非OP处理的是大量字符串或分隔符集)。感谢Douglas和Jason在仔细衡量了大多数情况下分隔符为“;”和“,”的性能后做出的回应,因此它将完美地适用于我的案例