C#实现固定长度文字自动换行
本文介绍如何在C#中实现固定宽度的文字自动换行,包括核心代码实现、测试用例及运行结果展示。
问题描述
在图形界面显示或日志处理等场景中,经常需要将较长的字符串按照指定的最大字符数(如3个、10个字符)进行切割,并在每个段落后添加换行符。例如将 "YanZhiwei" 按每3个字符换行,期望结果为 "Yan\r\nZhi\r\nwei"。
C#文字换行代码实现
以下是一个实用的静态扩展方法 WrapText,它接收原始字符串和最大宽度(字符数),并返回按要求换行后的字符串。该方法使用了 StringBuilder 来高效地处理字符插入操作。
#region 文字换行
/// <summary>
/// 文字换行
/// <para>eg:StringHelper.WrapText("YanZhiwei", 3);==>"Yan\r\nZhi\r\nwei"</para>
/// </summary>
/// <param name="data">需要换行的文字</param>
/// <param name="maxWidth">多少长度换行</param>
/// <returns>换行好的文字</returns>
public static string WrapText(this string data, int maxWidth)
{
int _stringCount = data.Length;
if (maxWidth > 0 && _stringCount > maxWidth)
{
StringBuilder _builderString = new StringBuilder(data);
int _breakCount = _builderString.Length / maxWidth;
for (int i = 0; i < _breakCount; i++)
{
int _insertPosition = i * maxWidth;
if (_insertPosition != 0)
{
int _offset = (i - 1) * 2;//(\r\n)
_builderString.Insert(_insertPosition + _offset, Environment.NewLine);
}
}
return _builderString.ToString();
}
else
{
return data;
}
}
#endregion
测试验证
我们可以编写一个简单的单元测试来验证该方法的正确性。测试中将调用 WrapText 方法处理 "YanZhiwei" 字符串,设定宽度为3,并检查结果是否符合预期。
[TestMethod()]
public void WrapTextTest()
{
string _actual = StringHelper.WrapText("YanZhiwei", 3);
Assert.AreEqual<string>(@"Yan
Zhi
wei", _actual);
}
运行效果
执行上述测试或普通程序后,输出的文字将严格按照设置的宽度进行分行显示。以下是具体的运行结果截图:
总结
通过使用 StringBuilder 结合循环插入环境换行符的方式,可以灵活地在C#中实现任意长度的文字自动换行。这种方法避免了逐个截取子串带来的性能损耗,适合处理大量文本数据的场景。以上就是C#文字换行的详细内容,更多关于C#编程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









