プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2020/04/27

[C#] 文字列内の文字が全て同じかどうかをチェックする

event_note2020/04/27 1:23

例えば 99999aaaa など、文字列内の文字が全て同じかどうかを簡単にチェックする方法です。

まず、単純に同じ文字かどうかだけを判定するなら、Linq を使えば一発です。

var str = "99999";
Console.WriteLine(str.Distinct().Count() == 1);// True

重複を排除した結果、要素数が1つだけになっていれば全て同じ文字と判断できます。

特定の文字の場合のみ、文字列内が全て同じ文字かどうかを判定したいなら、フィルタリングする必要があります。

var str1 = "00000";
var str2 = "00999";
var str3 = "99999";

// 文字が全て 9 の場合のみ True にしたい
Console.WriteLine(!str1.Any(x => x != '9') && str1.Distinct().Count() == 1);// False
Console.WriteLine(!str2.Any(x => x != '9') && str2.Distinct().Count() == 1);// False
Console.WriteLine(!str3.Any(x => x != '9') && str3.Distinct().Count() == 1);// True
  • 9 以外の文字を抽出した結果、要素数が 0 だったならば 9 以外の文字が含まれていない
  • 重複を排除した結果、要素数が1つだけになっていれば全て同じ文字

この2つの条件で判断できます。

コード自体は短いですが、毎回これを書くのも面倒なので、拡張メソッドでも作成しておくと便利かと思います。

もっと簡単に判別できる方法があれば教えてください。