【发布时间】:2010-12-13 06:41:08
【问题描述】:
必须有更好的方法来做到这一点。 我只想将长字符串拆分为 60 个字符行,但不要分词。因此,它不必添加最多 60 个字符,只需少于 60 个即可。
下面的代码是我所拥有的,它可以工作,但我认为有更好的方法。有人吗?
修改为使用 StringBuilder 并修复了删除重复单词的问题。 也不想使用正则表达式,因为我认为这会比我现在的效率低。
public static List<String> FormatMe(String Message)
{
Int32 MAX_WIDTH = 60;
List<String> Line = new List<String>();
String[] Words;
Message = Message.Trim();
Words = Message.Split(" ".ToCharArray());
StringBuilder s = new StringBuilder();
foreach (String Word in Words)
{
s.Append(Word + " ");
if (s.Length > MAX_WIDTH)
{
s.Replace(Word, "", 0, s.Length - Word.Length);
Line.Add(s.ToString().Trim());
s = new StringBuilder(Word + " ");
}
}
if (s.Length > 0)
Line.Add(s.ToString().Trim());
return Line;
}
谢谢
【问题讨论】:
-
您是在寻找更高效的算法还是更下一个编码器来阅读这种友好的方法?
-
有什么理由不使用泛型?
-
1.您的代码无法按预期工作。 s.Replace(Word,"") 不仅会替换最后一个,还会替换字符串中 Word 的任何部分匹配项。 2. s+=... 你最终会创建太多的临时字符串对象,因为字符串在 C# 中是不可变的。尝试使用 stringbuilder 或 string.Join() 方法。
-
我正在寻找更高效的东西。 Chansik 我感谢您指出这一点。我修好了它。并决定在我使用它时使用字符串生成器。
-
我将如何使用泛型来使其变得更好?