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);

現在の文字が数字であり、次の2文字が数字である場合にのみ数字が置き換えられる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 に答える