2011-06-21 73 views
-2

例如:如何屏蔽在C#傳入輸入字符串

string maskedString = MaskString("ABCDEFGHIJLK", 2, 3, 'X'); 

輸出:ABXXXXXXXJLK

string maskedString = MaskString("123456", 2, 3, '*'); 

輸出:12*456

string MaskString(string inputString, int leftUnMaskLength, int rightUnMaskLength, char maskCharacter) 
{ 
    //What is the simplest way to code this efficiently in C# .Net 3.5 
} 
+0

目前的情況是,這是完美的交代。 (在VB.NET中,'Mid'語句將在一行中解決問題。)雖然我假設第二個輸出應該是'12 * 456'。 –

+0

@馬克·赫德 - 重新開放,隨時回答(並且可能提高的問題多一點) –

+1

一個建議我是改變簽名有「MaskStartPosition」和「MaskLength」 - 而不是「UnMaskLeft」和「UnMaskRight ' –

回答

0

這裏是一個實現:

string MaskString(string inputString, int leftUnMaskLength, int rightUnMaskLength, char maskCharacter) 
{ 
    var output = new List<char>(); 
    var inputLength = inputString.Length; 
    for(var q = 0; q < inputLength; q++) 
    { 
      if (q < leftUnMaskLength || q > (inputLength - (rightUnMaskLength + 1))) 
      { 
       output.Add(inputString[q]); 
      } 
      else 
      { 
       output.Add(maskCharacter); 
      } 
    } 
    return new String(output.ToArray()); 
} 
3

您可以使用String.Substring方法來抓取字符串的開始和結束部分,並使用String構造函數構建遮罩的中間部分。你會得到這樣的事情,那麼:

static string MaskString(string inputString, int leftUnMaskLength, int rightUnMaskLength, char mask) 
{ 
    if ((leftUnMaskLength + rightUnMaskLength) > inputString.Length) 
     return inputString; 

    return inputString.Substring(0, leftUnMaskLength) + 
     new string(mask, inputString.Length - (leftUnMaskLength + rightUnMaskLength)) + 
     inputString.Substring(inputString.Length - rightUnMaskLength); 
} 
+0

+1 OP確實要求一個有效率的答案。順便說一句我的VB.NET「的單行」的主體是(因爲微軟的落實'Mid'語句的效率低下),這三條線:'MaskString = inputString':'昏暗maskLength = inputString.Length - (leftUnMaskLength + rightUnMaskLength) ':Mid(MaskString,leftUnMaskLength + 1,maskLength)=新字符串(mask,maskLength)' –

0

我寫低於節選內容與*的字符串和口罩半碼。您可以修改此代碼以指定需要屏蔽的字符數量。

public static string MaskedString(string originalString) 
{ 
    int halfLength; 
    string rightString; 
    var leftString = new StringBuilder(); 
    string maskedString; 

    if ((originalString == "-") || (string.IsNullOrEmpty(originalString))) 
    { 
     maskedString = originalString; 
    } 
    else 
    { 
     if (originalString.Length % 2 == 0) 
     { 
      halfLength = originalString.Length/2; 

      for (int i = 1; i <= halfLength; i++) 
      { 
       leftString.Append('*'); 
      } 
     } 
     else 
     { 
      halfLength = (originalString.Length + 1)/2; 

      for (int i = 1; i < halfLength; i++) 
      { 
       leftString.Append('*'); 
      } 
     } 

     rightString = originalString.Substring(originalString.Length - halfLength); 

     maskedString = leftString + rightString; 
    } 

    return maskedString; 
} 

E.g .;

 
Input - Reyan Chougle 
Output - ******Chougle