c# - 如何在第一个字符后屏蔽字符串
问题描述
假设我有一个包含人名的字符串:
var name = "Jason, Bruno Mars";
如何掩盖逗号string
后面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;
}
}
任何人都对如何以更有效的方式实现相同的结果有更好的了解?
解决方案
另一种选择,使用Regex.Matches选择除第一个字母之外的名称部分。正则表达式收集由空格分隔的所有字符串部分,跳过逗号之前的内容。
然后将 的集合Matches
传递给 Linq 的Aggregate()方法以执行替换。StringBuilder
用于存储由它自己的Replace()方法生成的字符串:
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
推荐阅读
- python - 如何使用 Python+selenium 单击此选项?
- asp.net-core - 如何将画面嵌入 asp.net core blazor?
- php - laravel 路由从控制器获取自动 ::index。所以 index@index 不存在显示。(检查图像)
- django - 使用 django-translations 在表单中显示所有语言
- node.js - 我无法从 xlsx 文件中读取多行
- docker - 部署为 kubernetes pod 时,容器中的文件丢失
- javascript - 正则表达式 | 模式属性值不是有效的正则表达式:Uncaught SyntaxError: Invalid regular expression
- angular - Angular Material Tabs 如何自定义标签行并添加文本或下拉列表?
- amazon-web-services - 从 AWS Lambda 调用 AWS Insight 查询
- javascript - 使用填充文档中的值创建 MongoDB 字段