【发布时间】:2020-03-07 14:50:13
【问题描述】:
我想按字符和行长度来打断一个长字符串,而不是打断单词。 在我的字符串中,我使用“|”作为我的分隔符,每一行都不能以分隔符结尾。我需要在“|”上打断,不要打断单词。
我尝试了以下方法,它着眼于最大行长度,并确保一切都合适。现在我必须通过“|”来实现分隔字符而不中断对行长度的检查。
int partLength = 35;
string sentence = "Silver badges are awarded for longer term goals. Silver badges are uncommon.";
string[] words = sentence.Split(' ');
var parts = new Dictionary<int, string>();
string part = string.Empty;
int partCounter = 0;
foreach (var word in words)
{
if (part.Length + word.Length < partLength)
{
part += string.IsNullOrEmpty(part) ? word : " " + word;
}
else
{
parts.Add(partCounter, part);
part = word;
partCounter++;
}
}
parts.Add(partCounter, part);
foreach (var item in parts)
{
Console.WriteLine(item.Value);
}
我尝试了以下按字符“|”中断:
string sentence = "The dog had a bone | a ball | and other toys.";
char charToTrim = '|';
string[] words = sentence.Split();
foreach (string word in words)
Console.WriteLine(word.TrimEnd(charToTrim));
这将打印新行上的所有单词,这是不正确的。 所以在长文本中,我需要查看最大行长度,以及分隔符“|”。单词必须在行内匹配,但新行不能以“|”结尾。
所以下面是正确的:
第 1 项 |项目 2 |项目 3 |项目 4
|项目 5 |等等
但以下是不正确的:
第 1 项 |项目 2 |项目 3 |项目 4 |
项目 5 |等等
【问题讨论】:
-
如果您在原始解决方案中为 Split 方法提供多个字符怎么办?它接受 char[],所以你可以这样写:string[] words = sentence.Split(new [] { ' ', '|' });
-
但是如果我这样做,它总是会在“|”上分割,即使还有更多单词的空间
-
那么我不清楚你到底想要什么。是否只是修剪“|”从线路末端?或者你想摆脱“|”完全在文本中?
-
我想在行中没有更多空间时中断(因为代码中设置了最大行长度)。词不能断。但是,一行绝不能以“|”结尾
-
因此,当特定单词没有更多空间时,如果有分隔符“|”即使上一行有空间,它也必须转到新行
标签: c# string split break line-breaks