string.split用于c#中的交替字符

时间:2012-03-04 22:38:46

标签: c# string split

我知道这将是一个简单的答案,但我是C#的新手。对于不同类型的拆分有很多答案,但我找不到这个问题。我试图通过交替的字符将字符串拆分为两个。

示例为:string example = "stackoverflow",输出为"sakvrlo""tcoefo"

如果它是奇数个字符,那么两个新字符串的长度是不同的。

谢谢!

2 个答案:

答案 0 :(得分:5)

StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();

string source = "some string to split";

// ALTERNATE: if you want an explicitly typed char[]
// char[] source = "some string to split".ToCharArray();

for( int i = 0; i < source.Length; i++ )
{
   if( i % 2 == 0 )
   {
        sb1.Append( source[i] );
   }
   else
   {
        sb2.Append( source[i] );
   } 
}

注意:

  • 我知道没有自动执行此操作的BCL方法(例如string.SplitAlternating()

  • 由于字符串的大小是已知的,StringBuilders可以使用固定的缓冲区大小进行初始化。

  • LINQ解决方案(@ usr&#39;答案)更清晰但更慢(如果重要,可能很少)。

  • 如果性能确实很重要,最快的方法可能是获取指向原始char数组的开头的指针,并通过递增由使用stacalloc声明的两个char数组创建的两个单独的指针进行迭代。随后,这两个char数组可以作为参数传递给字符串的构造函数。确保附加空终止符。

答案 1 :(得分:4)

var a = new string(source.Where((c,i) => i % 2 == 0).ToArray());
var b = new string(source.Where((c,i) => i % 2 != 0).ToArray());