0

我已经看到了一些使用 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 方法可以一次处理多个字符。

编辑:增加了对当前字符也是数字的要求。

4

1 回答 1

5

根据我评论中的解释,您可以使用 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");

好多了,不是吗?

于 2012-12-21T13:54:55.727 回答