我有一个简单的LINQ扩展方法...
public static IEnumerable<string> SplitOnLength(this string input, int length)
{
int index = 0;
while (index < input.Length)
{
if (index + length < input.Length)
yield return input.Substring(index, length);
else
yield return input.Substring(index);
index += length;
}
}
Run Code Online (Sandbox Code Playgroud)
这需要一个字符串,并将其切换为不超过给定长度的字符串集合.
这很好 - 但我想进一步.它将文字分成两半.我不需要它来理解任何复杂的东西,我只是希望它能够在早期切断一个字符串,如果切割它将在length文本中间切割(基本上任何不是空白的东西).
但是我很害怕LINQ,所以我想知道是否有人知道如何解决这个问题.我知道我要做什么,但我不知道如何处理它.
所以我要说我有以下文字.
这是我将通过字符串拆分器传递的示例文本块.
我称这种方法SplitOnLength(6)
我会得到以下内容.
我宁愿它足够智能停下来看起来更像..
//糟糕的例子,因为单个单词超过了最大长度,但在实际场景中长度会更大,接近200.
谁能帮我?
我将通过 for 循环解决这个问题:
var ret1 = str.Split(' ');
var ret2 = new List<string>();
ret2.Add("");
int index = 0;
foreach (var item in ret1)
{
if (item.Length + 1 + ret2[index].Length <= allowedLength)
{
ret2[index] += ' ' + item;
if (ret2[index].Length >= allowedLength)
{
ret2.Add("");
index++;
}
}
else
{
ret2.Add(item);
index++;
}
}
return ret2;
Run Code Online (Sandbox Code Playgroud)
首先我想到了 Zip,但在这里不太好。
和不同的执行版本与产量:
public static IEnumerable<string> SaeedsApproach(this string str, int allowedLength)
{
var ret1 = str.Split(' ');
string current = "";
foreach (var item in ret1)
{
if (item.Length + 1 + current.Length <= allowedLength)
{
current += ' ' + item;
if (current.Length >= allowedLength)
{
yield return current;
current = "";
}
}
else
{
yield return current;
current = "";
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3114 次 |
| 最近记录: |