2016-12-01 66 views
4

我需要计算所有元音并将其替换为文本框中的字母x。我设法做计数的一部分,这里的代码,但我有问题,用字母x替换文本框中的所有元音。有人能帮我吗?计算并替换文本框中的所有元音

int total = 0; 

string sentence = textBox1.Text.ToLower(); 
char[] vowels = { 'a', 'e', 'i', 'o', 'u', 'y'};     
{ 
     total++; 
} 

total = sentence.Count(c => vowels.Contains(c)); 
MessageBox.Show("There are " + total++ " vowels"; 

for (int i = 0; i < sentence.Length; i++) 

编辑1

谢谢大家的帮助。出于某种原因,我的文本框中的元音不会改变!它计数但不替换字母x。我在这里尝试了所有的解决方案,但仍然没有发生在我的文本框中的元音中。

+1

您必须将“senetnce”的内容分配给您的文本框。仅仅因为你说'sentence = textboax1.Value'并不意味着对'sentence'的更改也会反映在文本框中,因为字符串是不可变的。看我的编辑。 – HimBromBeere

回答

6
foreach(char vowel in vowels) 
    sentence = sentence.Replace(vowel, 'x'); 

出于某种原因,在我的文本并没有改变的元音!它执行 计数,但不替换字母x。我已经在这里尝试了所有的 解决方案,但是我的 文本框中的元音仍然没有发生任何变化。

该文本框和字符串没有相互链接。所以如果你改变字符串,你将不会改变TextBox.Text。你必须重新分配新的值:

textBox1.Text = sentence; // after you have used Replace like shown above 
4

您可以使用LINQ的

sentence = string.Concat(sentence.Select(c => vowels.Contains(c) ? 'x' : c)); 
+0

多么优雅:)! – Sid

1

尝试使用ForEachLinq -expression和string.Replace方法:

vowels.ToList().ForEach(vowel => sentence = sentence.Replace(vowel, 'x')); 

编辑1:编辑1:

你也可以尝试for -loop这也是你在你的问题的尝试:

for (int i = 0; i < sentence.Length; i++) { 
    if(vowels.Contains((char)sentence[i])) { 
     sentence[i] = 'x'; 
    } 
} 

编辑2:

要写入的sentence值回TextBox添加以下内容:

textBox1.Text = sentence; 
+0

谢谢大家的帮助。由于某种原因,当我点击按钮时,我的文本框中没有任何反应......标签计算正确的元音数量......但我现在尝试了所有的提示,但没有任何反应.. – Lini

+0

@Lini你的意思是没有替代品? – rbr94

+0

是的。在文本框中的元音假设改为x ...但没有替换.. – Lini

3

只是一个简单的正则表达式:

var r = new Regex("[aeiouy]"); 
sentence = r.Replace(sentence, "x"); 

编辑:由于字符串不会反映在您的文本框中sentence不可改变的变化,所以你必须重新分配它的值:

textBox1.Text = sentence; 
0

为什么不,也许只是一个正规表示法尝试,作为上面的同事已经建议?

类似于:

string text =“来了一些文字”;

 string vowels = @"([aeiou])"; 
     Regex regex = new Regex(vowels); 

     Match match = regex.Match(text); 

然后可能继续你的逻辑一些收集和至极一个foreach循环()你的一个字符/字符串“X”代替。

相关问题