c# - C# - 拆分为 20 个字符,但不是在单词之间
问题描述
我想将字符串拆分成更小的部分,字符串长度不超过 20 个字符。
当前代码能够将输入字符串拆分为长度为 20 的字符串数组。但是,这可能会删除一个单词。
当前代码是:
string[] Array;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < input.Length; i++)
{
if (i % 20 == 0 && i != 0) {
sb.Append('~');
}
sb.Append(input[i]);
}
Array = sb.ToString().Split('~');
对于 this: 的输入Hello. This is a string. Goodbye.
,输出将是['Hello. This is a str', 'ing. Goodbye.']
。
但是,如果它是一个单词,我不希望字符串被剪切。该单词应移动到数组中的下一个字符串。我怎样才能获得以下输出?
['Hello. This is a', 'string. Goodbye.']
解决方案
首先在单词边界上拆分你的句子:
var words = myString.Split();
现在连接单词,只要当前行中不超过 20 个字符:
var lines = new List<string> { words[0] };
var lineNum = 0;
for(int i = 1; i < words.Length; i++)
{
if(lines[lineNum].Length + words[i].Length + 1 <= 20)
lines[lineNum] += " " + words[i];
else
{
lines.Add(words[i]);
lineNum++;
}
}
这是一个用于测试的小提琴:https ://dotnetfiddle.net/s0LrFC
推荐阅读
- javascript - 缓冲二维数组,从第 2 行开始
- python - 如何在将参数传递到主代码时将文件作为模块导入
- python - 运行 spaCy 和添加语言模型的问题
- javascript - 如何从javascript中的嵌套对象数组递归创建平面数组?
- javascript - 使用按钮更改两个列表中仅一个的背景颜色
- arrays - 如何制作三重嵌套地图
- widget - WidgetKit 中的地图快照不调用 MKMapSnapshotter.start 的 completionHandler 回调
- python - 二进制数据被写为字符串文字 - 如何将其转换回字节?
- python - selenium Web Driver 不返回 Wikipedia 表
- swift - 如何以 stateobject 作为参数初始化视图?