Есть метод, который вставляет пробелы перед прописными буквами. Есть ошибка: в 1 вызове метода пробел ставится только 1 раз, даже если там есть много прописных букв.
BreakCamelCase("вывыВвывывы");
BreakCamelCase("вывыВвывDывы");
Ожидал получить в ответе:
вывы Ввывывы
вывы Ввыв Dывы
Получаю:
вывы Ввывывы
вывыВвыв Dывы
Код:
public static string BreakCamelCase(string str)
{
string n = null;
for(int i = 0; i < str.Length;i++)
{
if (Char.IsUpper(str[i]))
{
n = str.Insert(i, ' '.ToString());
}
}
return n;
}
Это происходит потому что на каждой итерации при срабатывании условия if (Char.IsUpper(str[i]))
вы присваиваете переменной n
изначальное значение переменной str
, вставив в нужной позиции пробел. Тем самым вы просто затираете предыдущие изменения переменной n
. Для решения проблемы вам нужно писать строку посимвольно, а не перезаписывать её заново при каждом срабатывании условия (в ответе ниже указан способ, не буду дублировать код). И да, при посимвольной работе со строками в цикле крайне желательно вместо string
использовать StringBuilder
- в силу неизменяемости строк на каждой итерации вашего цикла будет выделяться новая и притом всё бОльшая память под результирующую строку. StringBuilder
же в свою очередь позволяет дописывать данные без создания строки заново
Вы забываете что строки иммутабельны (неизменяемы).
Я бы переписал ваш код так:
public static string BreakCamelCase(string str)
{
string n = "";
for (int i = 0; i < str.Length; i++)
{
if (Char.IsUpper(str[i])) n += ' ';
n += str[i];
}
return n;
}
Ну и в перспективе переход к StringBuilder
Виртуальный выделенный сервер (VDS) становится отличным выбором
На сервере крутится служба, которая согласно определенных событий отправляет почтуСтолкнулся со следующей ошибкой:
Заранее прошу прощения за тупой вопросНо допустим я работаю в одном классе, есть определенный цикл, в котором условием является переход в другой...