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