Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

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

#c_sharp #net


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


Ответы

Ответ 1



Самый простой в плане скорости написания кода способ - использовать регулярные выражения: http://ideone.com/rbR09w public static string SplitToLines(string str, int n) { return Regex.Replace(str, ".{"+n+"}(?!$)", "$0\n"); }

Ответ 2



Ещё такой вариант: 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);

Ответ 3



Хороший в плене производительности способ - 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

Ответ 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(); } }

Ответ 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, должен лучше работать при очень большой длине строки.

Ответ 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(); ПС: что-то мне подсказывает что есть и поадекватней решение...

Ответ 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; } Тестить!

Ответ 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; }

Комментариев нет:

Отправить комментарий