繁体   English   中英

linq字符串在1个lambda表达式中处理2个字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM