Маскировка всех символов строки, за исключением последних n символов
Я хочу знать, как заменить символ строки условием "кроме последних номеров символов"?
Пример:
string = "4111111111111111";
И я хочу сделать это, чтобы
new_string = "XXXXXXXXXXXXX1111"
В этом примере я заменяю символ на "X", за исключением последних 4 символов.
Как я могу это достичь?
Ответы
Ответ 1
Вот способ продумать это. Вызовите последние цифры номера, чтобы оставить n
:
- Сколько символов будет заменено на
X
? Длина строки минус n
.
- Как мы можем заменить символы другими символами? Вы не можете напрямую изменить
string
, но можете создать новый.
- Как получить последние
n
символы из исходной строки? Там есть несколько способов сделать это, но наиболее простым является Substring
, что позволяет нам захватить часть строки, указав начальную точку и, необязательно, конечную точку.
Таким образом, он будет выглядеть примерно так (где n
- количество символов, которые должны покинуть оригинал, а str
- это исходная строка - string
не может быть именем вашей переменной, потому что это зарезервированное ключевое слово):
// 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);
Ответ 2
Это вам подходит?
var input = "4111111111111111";
var length = input.Length;
var result = new String('X', length - 4) + input.Substring(length - 4);
Console.WriteLine(result);
// Ouput: XXXXXXXXXXXX1111
Ответ 3
Как насчет чего-то вроде...
new_string = new String('X', YourString.Length - 4)
+ YourString.Substring(YourString.Length - 4);
создайте новую строку, основанную на длине текущей строки -4, и просто получите все "X". Затем добавьте последние 4 символа исходной строки
Ответ 4
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();
Ответ 5
Я думаю, вы могли бы использовать Select
с индексом
string input = "4111111111111111";
string new_string = new string(input.Select((c, i) => i < input.Length - 4 ? 'X' : c).ToArray());
Ответ 6
луй,
Пожалуйста, попробуйте этот...
string dispString = DisplayString("4111111111111111", 4);
Создать одну функцию с исходной строкой прохода и без цифры.
public string DisplayString(string strOriginal,int lastDigit)
{
string strResult = new String('X', strOriginal.Length - lastDigit) + strOriginal.Substring(strOriginal.Length - lastDigit);
return strResult;
}
Может помочь вам....
Ответ 7
Попробуй это:
String maskedString = "...."+ (testString.substring(testString.length() - 4, testString.length()));
Ответ 8
Это может быть немного Overkill по вашему запросу. Но вот быстрый метод расширения, который делает это.
по умолчанию используется x в качестве маскирующего Char, но его можно изменить с помощью дополнительного символа
public static class Masking
{
public static string MaskAllButLast(this string input, int charsToDisplay, char maskingChar = 'x')
{
int charsToMask = input.Length - charsToDisplay;
return charsToMask > 0 ? $"{new string(maskingChar, charsToMask)}{input.Substring(charsToMask)}" : input;
}
}
Здесь модульные тесты, чтобы доказать, что это работает
using Xunit;
namespace Tests
{
public class MaskingTest
{
[Theory]
[InlineData("ThisIsATest", 4, 'x', "xxxxxxxTest")]
[InlineData("Test", 4, null, "Test")]
[InlineData("ThisIsATest", 4, '*', "*******Test")]
[InlineData("Test", 16, 'x', "Test")]
[InlineData("Test", 0, 'y', "yyyy")]
public void Testing_Masking(string input, int charToDisplay, char maskingChar, string expected)
{
//Act
string actual = input.MaskAllButLast(charToDisplay, maskingChar);
//Assert
Assert.Equal(expected, actual);
}
}
}