Задать вопрос

Как разделить строку через тире?

Допустим есть строка:
string @string = "123456789";

Вопрос такой: как можно разделить string через "-", через каждые 4 знака? Т.е., чтобы выходной результат был такой: "1234-5678-9"??
  • Вопрос задан
  • 892 просмотра
Подписаться 4 Оценить Комментировать
Решения вопроса 2
AnnTHony
@AnnTHony
Интроверт
int step = 4;
string s = "1234567891233";
List<int> insertPosition = new List<int>();
for (int i = 1; i < (s.Length / step) + 1; i++)
{
    insertPosition.Add(step * i);
}

insertPosition.Reverse();

s = insertPosition.Aggregate(s, (current, d) => current.Insert(d, "-"));
Console.WriteLine(s); // 1234-5678-9123-3
Ответ написан
AxisPod
@AxisPod
public static class Ext
{
	public static IEnumerable<string> Chunk(this string str, int chunkSize)
	{
		return Enumerable.Range(0, (int)Math.Ceiling((double)str.Length / chunkSize))
   			.Select(i => str.Substring(i * chunkSize, Math.Min(chunkSize, str.Length - (i * chunkSize))));
	}
	
	public static string Join(this IEnumerable<string> src, string delimiter)
	{
		return String.Join(delimiter, src);
	}
}

public class Test
{
	public static void Main()
	{
		Console.WriteLine("1234567890".Chunk(3).Join("-"));
	}
}

Учитывая ленивость Linq и неизменямость строк данное решение будет явно оптимальнее, да и визуально понятнее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Руками добавлять по 4 символа в стрингбилдер и возможно регулярной , возможно linqом для извращенцев.
Ответ написан
Комментировать
WarFollowsMe
@WarFollowsMe
странно что не было примера с регуляркой. По моему такое решение лаконичнее
var some = "123456789";
var result = Regex.Replace(some, "([0-9]{4})", "$1-");
если нужен любой текст, то вот так:
Regex.Replace(some, "(.{4})", "$1-");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы