[英]linq string handling 2 chars in 1 lambda expression
我已经看到了一些使用Linq处理字符串的有趣方法:
例如,通过用X代替数字来隐藏字符串中的数字,我可以这样做:
string strNum = "Hello, my number is ... 3456c456";
string strHidden = new String(strNum.ToCharArray()
.Select(c => (!char.IsNumber(c)) ? c : 'X').ToArray());
Console.WriteLine(strHidden);
有没有一种Linq方法可以做到这一点,即仅当当前字符为数字且以下两个字符为数字时才替换数字?
有很多方法可以调整上面的方法,但是我想知道是否有一种简单易用的linq方法可以一次处理多个字符。
编辑:增加了当前字符也必须是数字的要求。
根据我的评论中的解释,您可以使用LINQ做到这一点:
string strHidden = new String(Enumerable.Range(0, strNum.Length)
.Select(i =>
char.IsNumber(strNum[i]) &&
Enumerable.Range(i+1,2).All(j => j < strNum.Length && char.IsNumber(strNum[j]))
? 'X'
: strNum[i])
.ToArray());
正则表达式替代:
var strHidden = Regex.Replace(strNum, @"\d(?=\d{2})", "X");
好多了,不是吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.