【问题标题】:Split a string by length with added condition [duplicate]添加条件按长度拆分字符串[重复]
【发布时间】:2016-03-30 10:49:08
【问题描述】:

我想将一个字符串分割成一定的长度,但我也想确保它是一个完整的单词。例如,如果我有:

string str = "Hello I have a dog ";

我想把它分成 5 个块我会做这样的事情(我从 Split String into smaller Strings by length variable 得到的):

public  IEnumerable<string> SplitByLength( string s, int length)
{
    for (int i = 0; i < s.Length; i += length)
    {
        if (i + length <= s.Length)
        {
            yield return s.Substring(i, length);
        }
        else
        {
            yield return s.Substring(i);
        }
    }
}

但这会导致类似的输出

"Hello"
"I Hav"
"e a d"
"og"

我该如何调整它,使其在 5 或空格后拆分?所以我会得到:

"Hello"
"I"
"Have"

这不是最好的例子,但它是我能想到的最好的例子。我需要它的原因是我在网页上显示结果,并且在一定数量的单词之后,由于背景图像而难以阅读,所以当它达到限制时它会换行但我没有'不希望半个单词在一行,另一半在下一行。

【问题讨论】:

  • 在空格后分割它们?所以你在哪里找到空间分割
  • 为什么不s.Split(' ');
  • 如果您的问题是网页上的文本呈现,那么您应该研究 HTML/CSS 而不是拆分文本,因为不同的屏幕尺寸等会发生什么?
  • 听起来您正试图在网页上手动换行。已经有很多方法可以做到这一点,而无需拆分字符串。正如@AllanS.Hansen 所说,最好的办法是研究 HTML / CSS。还有各种库,例如 Bootstrap 3。
  • 你的要求没有意义,如果你需要在最后换行;我希望您希望在某个字符串长度之前的 last 空格处中断。但正如@Allan 所写,我怀疑您是否应该以编程方式执行此操作,自动换行应该在 HTML/CSS 中完成。

标签: c# string


【解决方案1】:

你应该使用 if/else

                if (i + length <= s.Length)
                {
                    yield return s.Substring(i, length);
                }
                else if(s[i] == ' ')
                {
                    yield return s.Substring(i, s.IndexOf(" ",i) - i);
                }
                else
                {
                    yield return s.Substring(i);
                }

【讨论】:

    猜你喜欢
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2020-03-09
    • 2017-06-30
    相关资源
    最近更新 更多