Пожалуйста объясните в чём разница
Пожалуйста объясните в чём разница
Если пишу такой код:
class MainClass {
public static void Main (string[] args) {
string str = "Hello Bro";
string[] vowels = new string[] { "A", "a", "E", "e", "I", "i", "O", "o", "U", "u" };
for (int i = 0; i < vowels.Length; i++) {
str = str.Replace(vowels[i], "");
}
Console.WriteLine(str);
}
}
Вывод в консоль: Hll Br
По сути то что и требовалось, но если пишу такой код:
class MainClass {
public static void Main (string[] args) {
string str = "Hello Bro";
string[] vowels = new string[] { "A", "a", "E", "e", "I", "i", "O", "o", "U", "u" };
string result = "";
for (int i = 0; i < vowels.Length; i++) {
result = str.Replace(vowels[i], "");
}
Console.WriteLine(result);
}
}
То вывод в консоль следующий: Hello Bro
Это уже не то что требовалось, и собственно вопрос в следующем, почему если я завожу новую переменную и присваиваю туда решение то у меня один вывод, а если я присваиваю решение в старую переменную, то у меня другой вывод?
Ответы (2 шт):
Потому что метод Replace не меняет значение в исходной строке, а только возвращает новую.
Таким образом на последней итерации цикла вы в result кладете оригинальную строку str из которой убрана строка u.
Как-то все скупы на разъяснения, однако...
Метод Replace(char oldChar, char newChar возвращает новую строку, в которой значения oldChar заменены на newChar/ Из документации:
Returns a new string in which all occurrences of a specified Unicode character in this instance are replaced with another specified Unicode character.
В той же документации отдельным пояснением указано:
This method does not modify the value of the current instance. Instead, it returns a new string in which all occurrences of oldChar are replaced by newChar.
То есть метод этот саму строку НЕ изменяет, а просто возвращает новую, в которой все вхождения oldChar заменены на newChar...
В вашем коде в цикле в переменную result будут поочередно записываться значения:
Hello Bro - без A
Hello Bro - без a
Hello Bro - без E
Hllo Bro - без e
Hello Bro - без I
Hello Bro - без i
Hello Bro - без O
Hell Br - без o
Hello Bro - без U
Hello Bro - без U
Так как изначальная строка str будет оставаться одинаковой, то эти гласные буквы будут удаляться каждут итерацию из изначальной строки Hello Bro