计算并替换文本框中的所有元音

时间:2016-12-01 13:10:55

标签: c#

我需要计算所有元音并用文本框中的字母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。我在这里尝试了所有解决方案,但文本框中的元音仍然没有发生。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

您可以使用 Linq

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

答案 2 :(得分:3)

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

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

编辑:由于字符串是不可变的sentence更改未反映在您的文本框中,因此您必须重新分配其值:

textBox1.Text = sentence;

答案 3 :(得分:1)

尝试使用ForEach Linq - 表达式和string.Replace方法:

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

编辑1:

您也可以尝试for - 循环,因为您也在尝试提问:

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

编辑2:

要将sentence的值写回TextBox,请添加以下内容:

textBox1.Text = sentence;

答案 4 :(得分:0)

为什么不像上面的同事已经提出的那样,只是尝试正常的表达?

类似的东西:

string text =“这里有一些文字”;

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

        Match match = regex.Match(text);

然后可能继续你的逻辑与一些集合和foreach循环()你用char / string“x”替换。