C#换行每n个字符

时间:2011-10-14 13:33:07

标签: c# split line character

假设我有一个带有文本的字符串:“这是一个测试”。我怎么会每n个字符拆分一次?因此,如果n为10,那么它将显示:

"THIS IS A "
"TEST"

..你明白了。原因是因为我想将一条非常大的线分成更小的线,有点像自动换行。我想我可以使用string.Split(),但我不知道我是如何混淆的。

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:19)

让我们从代码审查中借用my answer的实现。这会在每个 n 字符处插入一个换行符:

public static string SpliceText(string text, int lineLength) {
  return Regex.Replace(text, "(.{" + lineLength + "})", "$1" + Environment.NewLine);
}

编辑:
要改为返回一个字符串数组:

public static string[] SpliceText(string text, int lineLength) {
  return Regex.Matches(text, ".{1," + lineLength + "}").Cast<Match>().Select(m => m.Value).ToArray();
}

答案 1 :(得分:3)

也许这可以用来处理极端大文件:

public IEnumerable<string> GetChunks(this string sourceString, int chunkLength)
{  
    using(var sr = new StringReader(sourceString))
    {
        var buffer = new char[chunkLength];
        int read;
        while((read= sr.Read(buffer, 0, chunkLength)) == chunkLength)
        {
            yield return new string(buffer, 0, read);
        }        
    }
}

实际上,这适用于任何TextReaderStreamReader是最常用的TextReader。您可以处理非常大的文本文件(IIS日志文件,SharePoint日志文件等),而无需加载整个文件,而是逐行读取。

答案 2 :(得分:2)

你应该可以使用正则表达式。这是一个例子:

//in this case n = 10 - adjust as needed
List<string> groups = (from Match m in Regex.Matches(str, ".{1,10}") 
                       select m.Value).ToList();

string newString = String.Join(Environment.NewLine, lst.ToArray());

详情请参阅此问题:
Splitting a string into chunks of a certain size

答案 3 :(得分:1)

可能不是最佳方式,但没有正则表达式:

string test = "my awesome line of text which will be split every n characters";
int nInterval = 10;
string res = String.Concat(test.Select((c, i) => i > 0 && (i % nInterval) == 0 ? c.ToString() + Environment.NewLine : c.ToString()));

答案 4 :(得分:1)

在进行代码审核后再回过头来看,在不使用Regex

的情况下采用相同的方法
public static IEnumerable<string> SplitText(string text, int length)
{
    for (int i = 0; i < text.Length; i += length)
    {
        yield return text.Substring(i, Math.Min(length, text.Length - i));  
    }
}