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

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

Вопрос такой: как можно разделить string через "-", через каждые 4 знака? Т.е., чтобы выходной результат был такой: "1234-5678-9"??
  • Вопрос задан
  • 724 просмотра
Решения вопроса 3
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 и неизменямость строк данное решение будет явно оптимальнее, да и визуально понятнее.
Ответ написан
@Madfisht3
string str = "123456789";
        System.Text.StringBuilder result = new System.Text.StringBuilder();
        for(int i = 0; i < str.Length; i++)
            result.Append(i % 4 == 0 && i > 0? $"-{str[i]}" : $"{str[i]}");
        Console.WriteLine($"{result}");

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

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

Войти через центр авторизации
Похожие вопросы