我知道这将是一个简单的答案,但我是C#的新手。对于不同类型的拆分有很多答案,但我找不到这个问题。我试图通过交替的字符将字符串拆分为两个。
示例为:string example = "stackoverflow"
,输出为"sakvrlo"
和"tcoefo"
。
如果它是奇数个字符,那么两个新字符串的长度是不同的。
谢谢!
答案 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());