您可以使用Regex.Replace:
Regex r = new Regex("[aAeEiIoOuU]");
//or Regex r = new Regex("[aeiou]", RegexOptions.IgnoreCase);
string[] names = new string[5];
names[0] = "john";
names[1] = "samuel";
names[2] = "kevin";
names[3] = "steve";
names[4] = "martyn";
for (int i = 0; i < names.Length; i++)
{
names[i] = r.Replace(names[i], "");
Console.WriteLine("The output is:" + names[i]);
}
爲了使您原始的方法工作,你需要添加一個調用string.Replace:
names[i] = names[i].Replace(vowels[j], "");
這就是說「替換names[i]
中vowels[j]
的任何發生並將結果指定爲names[i]
」。
但是,你正在聲明你的名字的陣列內您元音循環,使你不會,如果你添加替換代碼完全得到你所期望的結果。
你也在循環元音和名稱;從邏輯上講,扭轉這種情況可能是有道理的 - 這當然會使結果更容易輸出。像這樣的東西應該爲你工作:
string[] vowels = new string[] { "A", "a", "E", "e", "I", "i", "O", "o", "U", "u" };
string[] names = new string[5];
names[0] = "john";
names[1] = "samuel";
names[2] = "kevin";
names[3] = "steve";
names[4] = "martyn";
for (int i = 0; i < names.Length; i++)
{
for (int j = 0; j < vowels.Length; j++)
{
names[i] = names[i].Replace(vowels[j], "");
}
Console.WriteLine("The output is:" + names[i]);
}
編輯
在OP要求的例子,而無需使用Replace
的意見。這是一種這樣的方法(@Eser在their answer中有另一種方法)。這種方法迭代輸入字符串的每個字符,直到找到元音。在這一點上已讀取直到那時的字符(不包括元音)被加入到一個StringBuilder
:
public static string RemoveVowels(string name)
{
StringBuilder noVowels = new StringBuilder();
//keep track of the last index we read
int lastIndex = 0;
int i;
for (i = 0; i < name.Length; i++)
{
if (vowels.Contains(name[i]))
{
//the current index is a vowel, take the text from the last read index to this index
noVowels.Append(name, lastIndex, i - lastIndex);
lastIndex = i + 1;
}
}
if (lastIndex < i)
{
//the last character wasn't a vowel so we need to add the rest of the string here.
noVowels.Append(name, lastIndex, name.Length - lastIndex);
}
return noVowels.ToString();
}
上述方法可以被稱爲爲您的陣列中的每個名稱:
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine("The output is:" + RemoveVowels(names[i]));
}
至於使用哪種方法,我會選擇最具可讀性的方法,除非您有一些特定的性能要求,我認爲您需要測量每種方法並選擇最適合您要求的方法。
你正在比較元音與整個名稱。您需要循環每個名稱的每個字母以進行元音比較,或者使用[string.contains](https://msdn.microsoft.com/en-us/library/dy85x1sa(v = vs.110).aspx )。此外,你可以只存儲每個元音的一個版本(而不是上下),並在比較中處理大小寫 –
將'if(元音[j] ==名稱[i])'改爲'names [i] .Replace(元音[j],'');' – Les
你應該在開始解析元音之前ToUpper()字符串,並且只在你的字符串[]元音中包含大寫元音。它應該提高性能。 – PeonProgrammer