用星号替换小写字符

我写了一个代码,用于将小写字符替换为*。 但它不起作用。 问题出在哪儿?

private void CharacterReplacement() { Console.WriteLine("Enter a string to replacement : "); string TargetString = Console.ReadLine(); string MainString = TargetString; for (int i = 0; i < TargetString.Length; i++) { if (char.IsLower(TargetString[i])) { TargetString.Replace(TargetString[i], '*'); } } Console.WriteLine("The string {0} has converted to {1}", MainString, TargetString); } 

Replace()返回一个新字符串,因此您需要将其重新分配给TargetString

 TargetString = TargetString.Replace(TargetString[i], '*'); 

表达你的意图的另一种方式是使用Linq – 不确定哪个更好,这可以避免所有临时字符串,但还有其他开销:

 TargetString = new string(TargetString.Select(c => char.IsLower(c) ? '*' : c) .ToArray()); 

您当然可以使用正则表达式在一个简短的行中写这个:

 string output = Regex.Replace("ABCdef123", "[az]", "*"); // output = "ABC***123" 

基于Arto注释的改进版本,可处理所有小写的unicode字符:

 string output = Regex.Replace("ABCdefëï123", "\p{Ll}", "*"); // output = "ABC*****123"