2011-04-03 90 views
0

我編寫了一個代碼來將小寫字符替換爲*。 但它不起作用。 問題在哪裏?用星號替換小寫字符

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

它是如何不工作?提供一些細節。 – 2011-04-03 23:16:48

+0

.NET中的字符串是不可變的。 – Joren 2011-04-03 23:19:08

回答

4

Replace()返回一個新字符串,所以您需要將其重新分配給TargetString

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

另一種方式來表達你打算將使用LINQ - 不知道,我更喜歡這避免了所有的臨時字符串,但有其他開銷:通過使用正則表達式

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

錯誤是睡眠剝奪和飢餓的影響。 謝謝。 – Shahin 2011-04-03 23:21:06

+0

Linq Way很有用,謝謝。 – Shahin 2011-04-03 23:43:36

3

當然,你可以在一個短線寫:

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

基於阿爾託的評論,處理所有小寫Unicode字符的改進版:

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

其實\ p {Ll}更接近IsLower,因爲兩者都使用Unicode類別LowerCase。 (嘗試Ä12;Ä是Ä的小寫) – 2011-04-04 05:14:47