用*掩盖字符串前12个字符的部分?

Xai*_*oft 13 .net c# c#-4.0

如何获取值1234567890123451234567890123456将其转换为:

************2345************3456

上面的字符串之间的区别是一个包含15位数,另一个包含16位数.

我已经尝试了以下内容,但它没有保留15位数的最后4位数,现在重要的是字符串的长度,无论是13,14,15还是16,我想用a掩盖所有起始数字*,但保留最后4.这是我尝试过的:

String.Format("{0}{1}", "************", str.Substring(11, str.Length - 12))
Run Code Online (Sandbox Code Playgroud)

Chr*_*way 30

像这样的东西:

string s = "1234567890123"; // example
string result = s.Substring(s.Length - 4).PadLeft(s.Length, '*');
Run Code Online (Sandbox Code Playgroud)

这将掩盖字符串的最后四个字符以外的所有字符.它假定源字符串长度至少为4个字符.


Dar*_*rov 18

using System;

class Program
{
    static void Main()
    {
        var str = "1234567890123456";
        if (str.Length > 4)
        {
            Console.WriteLine(
                string.Concat(
                    "".PadLeft(12, '*'), 
                    str.Substring(str.Length - 4)
                )
            );
        }
        else
        {
            Console.WriteLine(str);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `new String('*',12)`可能比`""更容易阅读.PadLeft(12,'*')` (5认同)

Mik*_*fer 14

最简单的方法:创建一个扩展方法来提取最后四位数字.在String.Format调用中使用它.

例如:

public static string LastFour(this string value)
{
    if (string.IsNullOrEmpty(value) || value.length < 4)
    {
        return "0000";
    }
    return value.Substring(value.Length - 4, 4) 
}
Run Code Online (Sandbox Code Playgroud)

在你的代码中:

String.Format("{0}{1}", "************", str.LastFour());
Run Code Online (Sandbox Code Playgroud)

在我看来,这会导致代码更易读,并且可以重复使用.

编辑:也许不是最简单的方法,但可以产生更可维护的结果的替代方式.<耸肩/>

  • 根据我的经验,您只会*认为*在一个地方需要它。:-) (2认同)

Joh*_*lla 5

尝试这个:

var maskSize = ccDigits.Length - 4;
var mask = new string('*', maskSize) + ccDigits.Substring(maskSize);
Run Code Online (Sandbox Code Playgroud)