Видел примеры на различных языках, но для c# не понял как это реализовать, прошу помощи. Есть текст, к примеру 20 символов. Как сделать перенос строки после 10 символов к примеру? Спасибо.
Самый простой в плане скорости написания кода способ - использовать регулярные выражения: http://ideone.com/rbR09w
public static string SplitToLines(string str, int n)
{
return Regex.Replace(str, ".{"+n+"}(?!$)", "$0\n");
}
Хороший в плене производительности способ - 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();
}
Ещё такой вариант:
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);
Такой вариант...
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();
}
}
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
, должен лучше работать при очень большой длине строки.
Как-то так получилось
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();
ПС: что-то мне подсказывает что есть и поадекватней решение...
Стартуем цикл с начальной позиции и каждый раз вставляем необходимую строку. Сдвигаемся на 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;
}
Тестить!
Моя версия 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;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня есть простой апи контроллер, который я показал вышеНо каждый сможет прописать (пример - не тыкайте)"https://www
Здравствуйте, пишу программу которая получает фотографию, и рисует ее на консоли, но поскольку приложение консольное, а как вы знаете что...
Допустим есть программа которая фоном делает определенные операции, не важно какие, допустим каждые 10 секунд собирает информацию по нагрузке...