用星号替换小写字符

时间:2011-04-03 23:15:15

标签: c# string replace

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

   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);

    }

2 个答案:

答案 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"
相关问题