Заменить строчные буквы звездочкой - PullRequest
0 голосов
/ 04 апреля 2011

я написал код для замены строчных букв на *. Но это не работает. в чем проблема?

   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 ]

4 голосов
/ 04 апреля 2011

Replace() возвращает новую строку, поэтому вам нужно переназначить ее на TargetString:

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

Другой способ выразить свое намерение - использовать Linq - не уверен, что мне больше нравится, это позволяет избежать всех временных строк, но имеет другие издержки:

TargetString = new string(TargetString.Select(c => char.IsLower(c) ? '*' : c)
                                     .ToArray());
3 голосов
/ 04 апреля 2011

Конечно, вы можете написать это в одну короткую строку, используя регулярное выражение:

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

Улучшенная версия, основанная на комментарии Арто, которая обрабатывает все символы Юникода в нижнем регистре:

string output = Regex.Replace("ABCdefëï123", "\p{Ll}", "*"); // output = "ABC*****123"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...