假设我有一个字符串:
string str = "1111222233334444";
怎样才能把这个字符串分成一定大小的块呢?
例如,将其拆分为4的大小将返回字符串:
"1111"
"2222"
"3333"
"4444"
发布于 2009-09-20 11:07:06
static IEnumerable<string> Split(string str, int chunkSize)
{
return Enumerable.Range(0, str.Length / chunkSize)
.Select(i => str.Substring(i * chunkSize, chunkSize));
}
请注意,可能需要额外的代码来优雅地处理边缘情况(null
或空输入字符串、chunkSize == 0
、无法被chunkSize
整除的输入字符串长度等)。最初的问题没有为这些边缘情况指定任何需求,而在现实生活中,需求可能会发生变化,因此它们超出了本答案的范围。
发布于 2009-09-20 11:06:00
为什么不使用循环呢?下面是一些可以做得很好的东西:
string str = "111122223333444455";
int chunkSize = 4;
int stringLength = str.Length;
for (int i = 0; i < stringLength ; i += chunkSize)
{
if (i + chunkSize > stringLength) chunkSize = stringLength - i;
Console.WriteLine(str.Substring(i, chunkSize));
}
Console.ReadLine();
我不知道你会如何处理字符串不是4的因子的情况,但并不是说你的想法是不可能的,只是想知道如果一个简单的for循环做得很好,那么它的动机是什么?显然,上面的内容可以被清理掉,甚至可以作为扩展方法添加进来。
或者就像评论中提到的那样,你知道那就是/4
str = "1111222233334444";
for (int i = 0; i < stringLength; i += chunkSize)
{Console.WriteLine(str.Substring(i, chunkSize));}
发布于 2009-09-21 00:38:02
这样的一句话怎么样?
List<string> result = new List<string>(Regex.Split(target, @"(?<=\G.{4})", RegexOptions.Singleline));
使用这个正则表达式,最后一个块是否少于四个字符并不重要,因为它只会查看后面的字符。
我确信这不是最有效的解决方案,但我不得不把它扔出去。
https://stackoverflow.com/questions/1450774
复制相似问题