Вставка запятой после каждого char в С#

Мне нужен способ вставить запятую после каждого символа в строке. Так, например, если у меня есть строка букв

"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

Мне нужно сделать так, чтобы после каждой буквы от А до Z была запятая, Я хотел бы сохранить строку как есть и не преобразовывать ее в массив char или что-то в этом роде. Я не знаю, возможно ли это, но его просто что-то вроде как избежать.

Как я могу это сделать? Конечный результат должен быть следующим:

"A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,"

Спасибо

Ответ 1

В .Net 4:

str = String.Join<char>(",", str) + ",";

.Net 4.0 добавляет перегрузку String.Join, которая принимает IEnumerable<T>.
Этот код вызывает его с String, отлитым от IEnumerable<char>.

Мне нужно явно указать параметр generic type или вызвать перегрузку params string[] (используя один String).

Ответ 2

Ну, вам нужно что-то сделать для создания новой строки. Самый простой подход, вероятно, будет в .NET 4:

// string.Join won't put the trailing comma
string result = string.Join(",", (IEnumerable<char>) input) + ",";

или

string result = string.Join<char>(",", input) + ",";

Или в .NET 3.5, где перегрузка, которую мы хотим, не существует:

// string.Join won't put the trailing comma
string result = string.Join(",", input.Select(c => c.ToString())
                                      .ToArray()) + ",";

Если они недостаточно эффективны для вас, вы всегда можете сделать это вручную:

StringBuilder builder = new StringBuilder(input.Length * 2);
foreach (char c in input)
{
    builder.Append(c);
    builder.Append(',');
}
string result = builder.ToString();

Ответ 3

string InsertCommasBetweenChars(string s)
{
    return string.Join(",", s.ToCharArray());
}

Эта перегрузка string.Join существует только в .NET 4.0; если вы используете более раннюю версию, вы можете сделать это вместо:

string InsertCommasBetweenChars(string s)
{
    return string.Join(",", Array.ConvertAll(s.ToCharArray(), c => c.ToString()));
}

Ответ 4

Замена регулярных выражений может работать. Регулярное выражение может быть простым, как ([A-Z]), и выполнить замену с совпадением плюс. Мне нужно будет найти, как это сделать.

См. здесь http://msdn.microsoft.com/en-us/library/xwewhkd1.aspx.

  Dim input As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  Dim pattern As String = "([A-Z])"
  Dim replacement As String = "$1,"
  Dim rgx As New Regex(pattern)
  Dim result As String = rgx.Replace(input, replacement)

Ответ 5

вы можете использовать цикл for и переместить char на char, тогда вы можете добавить текущий char к StringBuilder и добавить запятую.

После завершения цикла вы либо возвращаете StringBuilder.ToString(), либо назначаете его исходной строковой переменной, если не нужно сохранять ее так же, как и раньше.

Ответ 6

Это должно работать

var input = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var result= String.Join(",", input.ToCharArray(0,input.Length));

Ответ 7

Я знаю, что вам не нужны массивы char, но как это для короткого исправления:

Console.WriteLine(string.Join(",", "abc".ToCharArray()));

Ответ 8

Здесь возьмите накопительную мудрость:

var result = "ABCDEFG".Aggregate("", (c, n) => c+ ("," + n)).Substring(1);

Это менее читаемо, чем .Join, но гораздо более гибкое.