Я начинаю программировать на C # и у меня есть вопрос:

У меня есть строка символов вроде abcdef123456789. Но строка слишком длинная, поэтому я хочу добавить : автоматически после второго, четвертого, шестого… символа.

Как я могу это сделать?

c#
-2
Minh Đức Lê 22 Фев 2015 в 12:19

3 ответа

Лучший ответ

Нет встроенного метода, который бы делал что-то подобное. Вам просто нужно поместить туда разделители, перебирая строку.

Вы можете перебирать символы в цикле и помещать их в StringBuilder, добавляя двоеточие к каждому второму символу:

string input = "abcdef123456789";

StringBuilder builder = new StringBuilder();
int cnt = 0;
foreach (char c in input) {
  if (cnt == 2) {
    builder.Append(':');
    cnt = 0;
  }
  builder.Append(c);
  cnt++;
}
string output = builder.ToString();
1
Guffa 22 Фев 2015 в 09:27

Вы можете использовать StringBuilder и сделать что-то вроде этого:

string sourceStr = "123456789";
StringBuilder s = new StringBuilder();
foreach(char c in sourceStr){
    s.append(c);
    s.append(":");
}
0
wingerse 22 Фев 2015 в 09:27

Вы можете попробовать этот подход. Я попытался сделать его как можно более читабельным, так что, надеюсь, он имеет для вас смысл.

var s = "abcdef123456789";

var charsChanged = new List<char>();

for (var i = 0; i < s.Length; i++)
{
    charsChanged.Add(s[i]);

    var evenCharacter = i % 2 != 0;
    var atEndOfString = i == s.Length - 1;

    if (evenCharacter && !atEndOfString)
    {
        charsChanged.Add(':');
    }
}

var updatedString = string.Concat(charsChanged));

updatedString будет равно ab:cd:ef:12:34:56:78:9.

Этот подход использует оператор модуля (%), чтобы определить, находимся ли мы на четном или нечетном символе. Дополнительные примеры см. здесь.

1
Richard Ev 22 Фев 2015 в 09:35