我写了一个代码,用于将小写字符替换为*。 但它不起作用。 问题出在哪里?
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);
}
答案 0 :(得分:4)
Replace()
会返回一个新字符串,因此您需要将其重新分配给TargetString
:
TargetString = TargetString.Replace(TargetString[i], '*');
表达你的意图的另一种方式是使用Linq - 不确定哪个更好,这可以避免所有临时字符串,但还有其他开销:
TargetString = new string(TargetString.Select(c => char.IsLower(c) ? '*' : c)
.ToArray());
答案 1 :(得分:3)
您当然可以使用正则表达式在一个简短的行中写这个:
string output = Regex.Replace("ABCdef123", "[a-z]", "*"); // output = "ABC***123"
基于Arto注释的改进版本,可处理所有小写的unicode字符:
string output = Regex.Replace("ABCdefëï123", "\p{Ll}", "*"); // output = "ABC*****123"