Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在第一个字符后屏蔽字符串_C#_Data Masking - Fatal编程技术网

C# 如何在第一个字符后屏蔽字符串

C# 如何在第一个字符后屏蔽字符串,c#,data-masking,C#,Data Masking,假设我有一个由人名组成的字符串: var name = "Jason, Bruno Mars"; 如何使用X为逗号后面的名称屏蔽字符串,并返回: var name = "Jason, BXXXX MXXX"; 我尝试过使用以下方法,但仅屏蔽前面的字符: string first, second, output; bool hasSpace, hasComma; int int_LENGTH; var name = "Jason, Bruno Mars"; hasComma = name.Co

假设我有一个由人名组成的字符串:

var name = "Jason, Bruno Mars";
如何使用
X
为逗号后面的名称屏蔽
字符串
,并返回:

var name = "Jason, BXXXX MXXX";
我尝试过使用以下方法,但仅屏蔽前面的字符:

string first, second, output;
bool hasSpace, hasComma;
int int_LENGTH;
var name = "Jason, Bruno Mars";
hasComma = name.Contains(",");

if (hasComma == true)
{
    int_LENGTH = name.IndexOf(",");
    if (int_LENGTH > 0)
    {
        first = name.Substring(0, int_LENGTH);
    }

    second = string.Join(",", name.Split(" ").Skip(1));
    hasSpace = second.Contains(" ");

    if (hasSpace == true)
    {
        second = string.Concat(new string('X', 12), second.Substring(second.Length - 4));
        output = first + "," + second;
    }
}
任何人都知道如何以更有效的方式实现相同的结果吗?

私有字符串掩码(字符串名称)
private string MaskName(string name)
{
    var parts = name.Split(',');
    var subparts = parts[1].Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);

    for (var i = 0; i < subparts.Length; i++)
    {
        var subpart = subparts[i];

        subparts[i] = subpart[0] + new string('X', subpart.Length - 1);
    }

    return parts[0] + ", " + string.Join(" ", subparts);
}
{ var parts=name.Split(','); var subparts=parts[1]。拆分(新[]{''},StringSplitOptions.RemoveEmptyEntries); 对于(变量i=0;i<子部分长度;i++) { var子部分=子部分[i]; 子部分[i]=子部分[0]+新字符串('X',子部分长度-1); } 返回部分[0]+“,”+字符串.Join(“,子部分); }
私有字符串掩码(字符串名称)
{
var parts=name.Split(',');
var subparts=parts[1]。拆分(新[]{''},StringSplitOptions.RemoveEmptyEntries);
对于(变量i=0;i<子部分长度;i++)
{
var子部分=子部分[i];
子部分[i]=子部分[0]+新字符串('X',子部分长度-1);
}
返回部分[0]+“,”+字符串.Join(“,子部分);
}
输出:-

输出:- 试试这个

 private string ReturnMaskedName(string name)
        {
            string temporary = "";
            var newname = (name.Split(new string[] { "," }, StringSplitOptions.None)[1].Trim().Split(new String[] { " " }, StringSplitOptions.None));

            foreach (string allnames in newname)
            {
                temporary = temporary + " " + allnames[0].ToString() + new string('X', allnames.Length - 1);
            }
            return name.Split(new string[] { " " }, StringSplitOptions.None)[0] + " " + temporary;
        }
试试这个

 private string ReturnMaskedName(string name)
        {
            string temporary = "";
            var newname = (name.Split(new string[] { "," }, StringSplitOptions.None)[1].Trim().Split(new String[] { " " }, StringSplitOptions.None));

            foreach (string allnames in newname)
            {
                temporary = temporary + " " + allnames[0].ToString() + new string('X', allnames.Length - 1);
            }
            return name.Split(new string[] { " " }, StringSplitOptions.None)[0] + " " + temporary;
        }

无需使用系统进行
拆分
正则表达式
的有效掩蔽方法。Linq

对于C#版本<7.2:

静态字符串掩码(字符串名称)
{
int indexOfComma=name.IndexOf(',');
如果(indexOfComma!=-1)
{
char[]temp=name.ToCharArray();
bool isFirstChar=true;
对于(int i=indexOfComma+1;i
对于C#version>=7.2:

静态字符串掩码(只读span name)
{
int indexOfComma=name.IndexOf(',');
如果(indexOfComma!=-1)
{
Span temp=stackalloc char[name.Length];
姓名。复印件(临时);
bool isFirstChar=true;
对于(int i=indexOfComma+1;i
无需使用系统进行
拆分
正则表达式
的有效掩蔽方法。Linq

对于C#版本<7.2:

静态字符串掩码(字符串名称)
{
int indexOfComma=name.IndexOf(',');
如果(indexOfComma!=-1)
{
char[]temp=name.ToCharArray();
bool isFirstChar=true;
对于(int i=indexOfComma+1;i
对于C#version>=7.2:

静态字符串掩码(只读span name)
{
int indexOfComma=name.IndexOf(',');
如果(indexOfComma!=-1)
{
Span temp=stackalloc char[name.Length];
姓名。复印件(临时);
bool isFirstChar=true;
对于(int i=indexOfComma+1;i
另一个选项,用于选择除第一个字母以外的名称部分。正则表达式收集由空格分隔的所有字符串部分,跳过逗号之前的部分。
然后将
匹配项的集合传递给Linq的方法以执行替换。
A用于存储由其自己的方法生成的字符串:

string theName = "Jason Et Alt., Bruno Mars And More Names";
var matches = Regex.Matches(theName, @"(?!.*?,)\s+?.(\w+)");

string outName = matches.OfType<Match>().Aggregate(new StringBuilder(theName), (sb, m) => 
   sb.Replace(m.Groups[1].Value, new string('X', m.Groups[1].Length))).ToString();
另一个选项,用于选择除第一个字母以外的名称部分。正则表达式收集由空格分隔的所有字符串部分,跳过逗号之前的部分。
然后将
匹配项的集合传递给Linq的方法以执行替换。
A用于存储由其自己的方法生成的字符串:

string theName = "Jason Et Alt., Bruno Mars And More Names";
var matches = Regex.Matches(theName, @"(?!.*?,)\s+?.(\w+)");

string outName = matches.OfType<Match>().Aggregate(new StringBuilder(theName), (sb, m) => 
   sb.Replace(m.Groups[1].Value, new string('X', m.Groups[1].Length))).ToString();

似乎你真的试图屏蔽每个单词中第一个后面的所有字符,但不包括第一个单词?似乎你真的试图屏蔽每个单词中第一个后面的所有字符,但不包括第一个单词?
static string MaskName(ReadOnlySpan<char> name)
{
    int indexOfComma = name.IndexOf(',');

    if (indexOfComma != -1)
    {
        Span<char> temp = stackalloc char[name.Length];

        name.CopyTo(temp);

        bool isFirstChar = true;

        for (int i = indexOfComma + 1; i < temp.Length; i++)
        {
            if (temp[i] == ' ')
                isFirstChar = true;
            else if (isFirstChar)
                isFirstChar = false;
            else
                temp[i] = 'X';
        }

        return new string(temp);
    }
    else
    {
        return name.ToString();
    }
}
string theName = "Jason Et Alt., Bruno Mars And More Names";
var matches = Regex.Matches(theName, @"(?!.*?,)\s+?.(\w+)");

string outName = matches.OfType<Match>().Aggregate(new StringBuilder(theName), (sb, m) => 
   sb.Replace(m.Groups[1].Value, new string('X', m.Groups[1].Length))).ToString();
outname = Jason Et Alt., BXXXX MXXX AXX MXXX NXXXX