首页 > 解决方案 > 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.']

标签: c#stringsplit

解决方案


首先在单词边界上拆分你的句子:

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


推荐阅读