Вставка запятой после каждого 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, но гораздо более гибкое.