2013-03-07 22 views
7

Chcę wiedzieć, w jaki sposób mogę zamienić znak ciągu na warunek "z wyjątkiem ostatnich znaków liczbowych"?Maskowanie wszystkich znaków ciągu, z wyjątkiem ostatnich n znaków

Przykład:

string = "4111111111111111"; 

I chcę, aby to, że

new_string = "XXXXXXXXXXXXX1111" 

W tym przykładzie zastąpi znak "X", z wyjątkiem ostatnich 4 znaków.

Jak mogę to osiągnąć?

+1

u oznacza cztery ostatnie znaki każdym razem – tariq

+0

@tariq, to ​​nie jest stały. nie za każdym razem –

+0

, więc to, co określa, ile znaków chcesz pokazać – tariq

Odpowiedz

6

Oto sposób na przemyślenie tego. Zadzwoń ostatnia liczba znaków opuścić n:

  1. Ile znaków zostanie zastąpiony przez X? Długość łańcucha minus n.
  2. Jak możemy zamienić postacie na inne postacie? Nie można bezpośrednio modyfikować modelu string, ale można zbudować nowy.
  3. Jak zdobyć ostatnie znaki n z oryginalnego ciągu? Jest kilka sposobów na zrobienie tego, ale najprostszy jest prawdopodobnie Substring, który pozwala nam chwycić część łańcucha przez określenie punktu początkowego i opcjonalnie punktu końcowego.

Tak to będzie wyglądać mniej więcej tak (gdzie n jest liczba znaków do opuszczenia od oryginału, a str jest oryginalny łańcuch - string nie może być nazwą zmiennej, bo to zarezerwowane słowo kluczowe) :

// 2. Start with a blank string 
var new_string = ""; 

// 1. Replace first Length - n characters with X 
for (var i = 0; i < str.Length - n; i++) 
    new_string += "X"; 

// 3. Add in the last n characters from original string. 
new_string += str.Substring(str.Length - n); 
+0

dziękuję !, spróbuję tego –

+0

@ cheol.lui, to może działać dla Ciebie, ale przesada w odniesieniu do tworzenia zmiennych, pętli i ciąg ciąg + jeden znak na raz i garbage collection ... Tak, opis działa cóż, aby dać ci mentalną odpowiedź "jak rozwiązać", ale zdecydowanie nie jest tak skuteczna, jak inne zamieszczone opcje. – DRapp

13

Czy to ci odpowiada?

var input = "4111111111111111"; 
var length = input.Length; 
var result = new String('X', length - 4) + input.Substring(length - 4); 

Console.WriteLine(result); 

// Ouput: XXXXXXXXXXXX1111 
+0

dzięki !, Spróbuję tego –

+0

To rozwiązanie działało doskonale dla mnie i było zwięzłe. Dzięki! – Lexi847942

2
StringBuilder sb = new StringBuilder(); 
Char[] stringChar = string.toCharArray(); 
for(int x = 0; x < stringChar.length-4; x++){ 
    sb.append(stringChar[x]); 
} 
sb.append(string.substring(string.length()-4)); 

string = sb.toString(); 
9

Jak o coś takiego ...

new_string = new String('X', YourString.Length - 4) 
        + YourString.Substring(YourString.Length - 4); 

utwórz nowy łańcuch na podstawie długości bieżącego ciągu -4 i po prostu go wszystkie "X". Następnie dodać na przestrzeni ostatnich 4 znaków oryginalnego napisu

+0

To jest najpiękniejsza implementacja tego, co kiedykolwiek widziałem. Brawo. Zrobiłeś to, co zajęło mi 7 linii w 1. –

1

Chyba można używać Select z indeksem

string input = "4111111111111111"; 
string new_string = new string(input.Select((c, i) => i < input.Length - 4 ? 'X' : c).ToArray()); 
1

lui, Proszę Spróbuj tego ...

string dispString = DisplayString("4111111111111111", 4); 

Tworzenie jedna funkcja z przekazaniem oryginalnego ciągu znaków i cyfr.

public string DisplayString(string strOriginal,int lastDigit) 
    { 
     string strResult = new String('X', strOriginal.Length - lastDigit) + strOriginal.Substring(strOriginal.Length - lastDigit); 
     return strResult; 
    } 

Może pomóc ....

Powiązane problemy