Перенос строки после N символа в c#

597
07 июля 2017, 03:26

Видел примеры на различных языках, но для c# не понял как это реализовать, прошу помощи. Есть текст, к примеру 20 символов. Как сделать перенос строки после 10 символов к примеру? Спасибо.

Answer 1

Самый простой в плане скорости написания кода способ - использовать регулярные выражения: http://ideone.com/rbR09w

public static string SplitToLines(string str, int n)
{
  return Regex.Replace(str, ".{"+n+"}(?!$)", "$0\n");
}
Answer 2

Хороший в плене производительности способ - StringBuilder: http://ideone.com/Mmnvjp

public static string SplitToLines(string str, int n)
{
  var sb = new StringBuilder(str.Length + (str.Length + 9) / 10);
  for (int q=0; q<str.Length; )
  {
    sb.Append(str[q]);
    if (++q % n == 0)
      sb.AppendLine();
  }
  if (str.Length % n == 0)
    --sb.Length;
  return sb.ToString();
}
Answer 3

Ещё такой вариант:

string text = "абвгдеёжзиийклмн";
int k = 10, i = text.Length;
text = text.Substring(0, k) + "\n" + text.Substring(k+1, i-k-1);

By tym32167:

text = text.Substring(0, k) + Environment.NewLine + text.Substring(k + 1, i - k - 1);
Answer 4

Такой вариант...

using static System.Console;
class Program
{
    public static string Insert_LF_n(string s, int n)
    {
        char[] c = new char[s.Length + s.Length / n];
        int i = 0, j = 1;
        foreach(char ch in s)
        {
            c[i++] = ch;
            if(j++ % n == 0)
            {
                c[i++] = '\n';
                j = 1;
            }
        }
        // если последний символ - "перевод строки" - удаляем.
        if (c[i - 1] == '\n')
            i--;
        return new string(c, 0, i);
    }

    static void Main(string[] args)
    {
        string s = "kjabdjlirujl;qkmrghwiureh;alksngk;jhdriughjksndv.ma'pjkrdoigkdfjnvsdlkjfp'iowjoeijrlkdjflk";
        WriteLine(s);
        Write('\n' + Insert_LF_n(s, 10));
        ReadKey();
    }
}
Answer 5
string myString = "My very long string.......................................";
string rn = Environment.NewLine;
int offset = 10;
StringBuilder sb = new StringBuilder(myString);
for (int i = 1; i <= myString.Length / offset; i++)
{
    sb.Insert(i * offset + (i - 1) * rn.Length, rn);
}
Console.WriteLine(sb.ToString());

Сделал через StringBuilder, должен лучше работать при очень большой длине строки.

Answer 6

Как-то так получилось

int countOnOneLine = 10;
string testStr = "123456789D123456789D1111";
string resultStr = "";
for (int i = 1; i <= testStr.Length; i++)
{
    if (i % countOnOneLine == 0)
        resultStr += testStr[i - 1] + Environment.NewLine;
    else
        resultStr += testStr[i - 1];
}
Console.WriteLine(resultStr);
Console.ReadLine();

ПС: что-то мне подсказывает что есть и поадекватней решение...

Answer 7

Стартуем цикл с начальной позиции и каждый раз вставляем необходимую строку. Сдвигаемся на 10 + размер вставленной строки. И т.д.

Использование:

var result = InsertEach(source, Environment.NewLine, 10);

Метод:

public static string InsertEach(string source, string insertValue, int interval)
{
    var lengthOfNewLine = insertValue.Length;
    for (var i = interval; i < source.Length; i += interval + lengthOfNewLine)
    {
        source = source.Insert(i, insertValue);
    }
    return source;
}

Тестить!

Answer 8

Моя версия Regex)

    static void Main(string[] args)
    {
        Console.WriteLine(Regex());
        Console.WriteLine(Iteration());
        Console.ReadKey();
    }
    static string Regex()
    {
        string pattern = @"(.{0,10})";
        string input = "qwertyuiopqqwertyuiopqwertyuiopwertyuio";
        string replacement = "$1\n";
        Regex rgx = new Regex(pattern);
        string result = rgx.Replace(input, replacement);
        return result;
    }
    static string Iteration()
    {
        int n = 10;
        string input = "qwertyuiopqqwertyuiopqwertyuiopwertyuio";
        for (int i = n; i < input.Length; i += n + 1)
        {
            input = input.Insert(i, "\n");
        }
        return input;
    }
READ ALSO
Как сделать приватную WebApi

Как сделать приватную WebApi

У меня есть простой апи контроллер, который я показал вышеНо каждый сможет прописать (пример - не тыкайте)"https://www

253
Конвертирование Color в ConsoleColor

Конвертирование Color в ConsoleColor

Здравствуйте, пишу программу которая получает фотографию, и рисует ее на консоли, но поскольку приложение консольное, а как вы знаете что...

227
Сворачивание приложения в трей

Сворачивание приложения в трей

Допустим есть программа которая фоном делает определенные операции, не важно какие, допустим каждые 10 секунд собирает информацию по нагрузке...

243