2020年10月20日
川俣晶の縁側ソフトウェアC# コーディング How To total 1026 count

【入門級】KAMADO TANJIROにAは何回出てくるか? 文字列中に特定の文字が何回出てくるか数えてみよう

Written By: 川俣 晶連絡先

文字列中に特定の文字が何回出てくるか数えてみよう §

 文字列中に特定の文字が何回出てくるか数えてみましょう。

 そのような機能を持ったメソッドはstringクラスにはありませんが、LINQにはあります。それを使えば簡潔に書けます。サンプルソースの方法1です。

 LINQを使わないとすればIndexOfメソッドを繰り返す使うことで、全ての文字を調べることになります。これがサンプルソースの方法2です。

 IndexOfメソッドでは細かい条件指定ができないので、単純にループをまわしてifで判定させているのが方法3です。

 方法1は簡潔だが自由度が低いと思うなら、条件判定をWhereメソッドに分離して方法4のように書き直すことで来ます。この場合は、Whereメソッドの前後にどんな処理を挟むことも自由です。

罠の数々 §

  • 条件付きのCountメソッドの用法は、LengthプロパティとCountメソッドは似たようなもの……と思い込むと見落とす。

参考リンク §

Enumerable.Count メソッド

String.IndexOf メソッド

 String.IndexOf メソッドは文字列専用だが、Enumerable.Count メソッドはどんな型が相手でも使用できる。上のリンクを辿って定義の違いを確認してみよう。

リポジトリ §

https://github.com/autumn009/cshowto

CountChar §

using System;

using System.Linq;

class Program

{

    private static void CountIt(string s)

    {

        // 方法1・LINQを使う

        var n1 = s.Count(c => c == 'A');

        // 方法2・IndexOfを繰り返す

        var idx = 0;

        var n2 = 0;

        for (; ; )

        {

            idx = s.IndexOf('A', idx + 1);

            if (idx <= 0) break;

            n2++;

        }

        // 方法3・単純ループ

        var n3 = 0;

        foreach (var item in s) if (item == 'A') n3++;

        // 方法4・Where+Count

        var n4 = s.Where(c => c == 'A').Count();

        Console.WriteLine($"{s}にAは{n1}個含まれています。");

        Console.WriteLine($"{s}にAは{n2}個含まれています。");

        Console.WriteLine($"{s}にAは{n3}個含まれています。");

        Console.WriteLine($"{s}にAは{n4}個含まれています。");

    }

    static void Main()

    {

        CountIt("KAWAMATA");

        CountIt("MEITANTEI CONAN");

        CountIt("KAMADO TANJIRO");

    }

}

実行結果

KAWAMATAにAは4個含まれています。

KAWAMATAにAは4個含まれています。

KAWAMATAにAは4個含まれています。

KAWAMATAにAは4個含まれています。

MEITANTEI CONANにAは2個含まれています。

MEITANTEI CONANにAは2個含まれています。

MEITANTEI CONANにAは2個含まれています。

MEITANTEI CONANにAは2個含まれています。

KAMADO TANJIROにAは3個含まれています。

KAMADO TANJIROにAは3個含まれています。

KAMADO TANJIROにAは3個含まれています。

KAMADO TANJIROにAは3個含まれています。

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?