【Unity】文字列の中に指定の文字列が何回出てくるか【C#】

文字列のチェック
スポンサーリンク

Unityには文字列を扱う関数は多く用意されていますが「特定の文字列が、調査対象の文字列の中に何度出現するか」を調べるものはありません。

そこで今回は、簡易的にその回数を調べることができる機能を作ってみたいと思います。

今回作る機能により、文字列の中で何回改行されたかという調査も可能になります。一度試してみてください!

こんな人におすすめ

・文字または文字列出現回数を調べたい
・改行などの回数も調べたい

サンプルコード

サンプルは以下のコードの通りです。新しいスクリプトを作りUpdateの下にでも追加してください。

// 指定の文字が何回出てくるか
private int CountText(string search,string target)
{
    int cnt = 0;
    bool check = true;

    while (check)
    {
        if(target.IndexOf(search,System.StringComparison.CurrentCulture) == -1)
        {
            check = false;
        }
        else
        {
            target = target.Remove(0, target.IndexOf(search, System.StringComparison.CurrentCulture)+1);
            cnt++;
        }
    }

    return cnt;
}
追加位置サンプル

使用例と実行結果

実際に使用した際はこんな以下のような感じになります。

文字「a」を調べる。

string hoge="abcdefghijabcdefghij";

CountText("a",hoge);
// 実行結果
2

文字列「abc」を調べる。

string hoge="abcabbacc";

CountText("abc",hoge);
// 実行結果
1

実行結果の確認は「Debug.Log(CountText(“a”,hoge));」などをStartで呼び出すと簡単に確認できます。今回の関数は戻り値として出現回数を返すようにしています。

改行の回数を調べたい場合は、調べる文字列に改行コードの「\n」を入れて調べてください。

簡易的な解説

// 指定の文字が何回出てくるか
private int CountText(string search,string target)
{
    int cnt = 0;
    bool check = true;

    while (check)
    {
        if(target.IndexOf(search,System.StringComparison.CurrentCulture) == -1)
        {
            check = false;
        }
        else
        {
            target = target.Remove(0, target.IndexOf(search, System.StringComparison.CurrentCulture)+1);
            cnt++;
        }
    }

    return cnt;
}

今回行っている処理の簡単な解説も行っておきます。

「.IndexOf」は調査対象の文字列が何文字目に出てくるかを戻り値で知ることができます。また、文字列が含まれていない場合は「-1」を返します。

調査対象の文字列が含まれていない場合は、チェックを「false」にして処理を終わります。逆に調査対象の文字列が含まれていた場合は、「.Remove」を使って、調査対象の文字列までの文字を消し、「cnt」を進めて再度チェックを行います。

これを調査対象の文字列が出てこなくなるまで繰り返すことで、出現回数を調べています。

まとめ

今回の処理は特に複雑なことはやっていない簡易的なものなので、理解しやすい機能かと思います。自身の望む機能がない場合は、積極的に作っていくようにしましょう!