ネプラスのテックブログ。ネットワーク、クラウド、サーバなどのITインフラ情報を中心に発信中。

  1. ネプラス インフラエンジニア採用
  2. テックマガジン
  3. テクノロジー
  4. 文字列の検索とは|C#の文字列検索に使うメソッド6種などいくつか紹介します

文字列の検索とは|C#の文字列検索に使うメソッド6種などいくつか紹介します

  • テクノロジー
  • プログラミング
公開日時:   更新日時:
文字列の検索とは|C#の文字列検索に使うメソッド6種などいくつか紹介します
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

    C#エンジニア 案件・求人一覧はこちら

    文字列の検索とは


    文字列の検索とは、検索エンジンのように指定したキーワードを含む文字列を検索できる機能です。

    C#では、IndexOfメソッドを基本として、ContainsメソッドやStartsWithメソッド、EndsWithメソッドを文字列検索に使用できます。

    ここからは、C#の文字列検索ができる6種類のメソッドのほか、細かな検索条件を設定する場合のやり方について紹介していきます。

    C#の文字列検索に使うメソッド6種


    C#の文字列探索に使うメソッド6種の使い方についてお話しします。

    C#で文字列探索するメソッドは主にIndexOfメソッドとContainsメソッド、StartsWithメソッド、EndsWithメソッドがありますが、それぞれ異なる条件で検索できるようになっています。

    IndexOfメソッドは、指定した文字列が含まれていた場合、その文字列のインデックス(場所)を返しますが、Containsメソッドと他2つのメソッドは、指定した文字列が含まれているかどうかを判定します。

    使用するメソッドによっては、逆方向に文字検索したり、複数文字を検索することもできます。目的に合ったメソッドを選ぶようにしましょう。

    1:String.IndexOfで基本検索

    C#の文字列検索でいちばん使いやすく機能が多いメソッドはString.IndexOfでしょう。このメソッドは検索対象の文字列に、指定した文字列が0から数えて何文字目にあるかを返します。指定した文字列が無い場合は-1を返します。以下はその簡単な使用例です。

    string str = “これは文字列検索のテストです。”;

    Console.WriteLine(str.IndexOf(“テスト”));
    Console.WriteLine(str.IndexOf(“てすと”));
    Console.WriteLine(str.IndexOf(“これ”));

    手軽に使えるString.IndexOf

    上の例を実行すると以下のような結果になります。

    9
    -1
    0

    “テスト”は0から数えて9文字目、”てすと”は平仮名なので一致せず-1、”これ”は先頭なので0になります。

    なおString.IndexOfは検索開始位置を指定することができます。以下がその例です。

    string str = “テストです、テストなのです。”;
    Console.WriteLine(str.IndexOf(“テスト”, 1));

    結果は6になります。0から数えて1文字目から検索するので、検索対象が”ストです、テストなのです。”となって6文字目になります。

    2:String.LastIndexOfで末尾から検索

    String.LastIndexOfはIndexOfとは違い、文字列の先頭方向からではなく末尾方向から検索します。以下が使用例です。

    string str = “テストです、テストなのです。”;

    Console.WriteLine(str.LastIndexOf(“テスト”));
    Console.WriteLine(str.LastIndexOf(“テスト”,8));
    Console.WriteLine(str.LastIndexOf(“テスト”,7));

    結果は以下になります。

    6
    6
    0

    1つ目のLastIndexOfは末尾から先頭方向に向かって検索して6文字目で”テスト”を検出しています。2つ目は8文字目から検索してすぐに”テスト”を検出したので1つ目と同じ結果です。しかし3つ目は7文字目からのため、”テストです、テス”の末尾から検索し始めるので、0文字目の結果を返すのです。

    3:String.IndexOfAnyで複数文字を検索

    String.IndexOfAnyは文字列に指定したchar配列のどれかが含まれていた場合、その位置を返します。以下が使用例です。

    string str = “これは文字列検索の\nテストです。”;
    char[] c_ary = { ‘\n’, ‘\t’, ‘ ‘ };

    Console.WriteLine(str.IndexOfAny(c_ary));

    結果は\nの位置の9を返します。使い道が限られそうですが、このサンプルのように文字列に改行コードやタブ、半角スペース等が入っているかどうかを検出する時には便利でしょう。

    4:Containsで含まれているか判定

    Containsメソッドは、指定した文字列が検索対象の文字列に含まれている場合はtrueを返し、含まれていない場合はfalseを返すメソッドです。以下が使用例です。

    string str = “これは文字列検索のテストです。”;
    string keyword = “テスト”;

    if(str.Contains(keyword)) {
    Console.WriteLine(“指定した文字列が含まれています。”);
    } else {
    Console.WriteLine(“指定した文字列がありません。”);
    }

    結果はtrueが返されるため、「指定した文字列が含まれています」と出力されます。

    5:StartsWithで先頭一致を判定

    StartsWithメソッドは、指定した文字列が検索対象の文字列を検索し、先頭が一致した場合にはtrueを返し、一致しなかった場合にはfalseを返すメソッドです。

    指定した文字列が前から一致するかを判定するメソッドですので、途中で一致しても一致した判定にはならないことに注意してください。以下が使用例です。

    string str = “これは文字列検索のテストです。”;

    if(str.StartsWith(“テスト”)) {
    Console.WriteLine(“前方一致しています”);
    } else {
    Console.WriteLine(“前方一致していません”);
    }

    結果はfalseが返されるため、「前方一致していません」と出力されます。

    6:EndsWithで末尾一致を判定

    EndsWithメソッドは、指定した文字列が検索対象の文字列を検索し、後方が一致した場合にはtrueを返し、一致しなかった場合にはfalseを返すメソッドです。

    StartsWithとは逆に、指定した文字列が後ろから一致するかを判定するメソッドです。以下が使用例です。

    string str = “これは文字列検索のテストです。”;

    if(str.EndsWith(“です。”)) {
    Console.WriteLine(“後方一致しています”);
    } else {
    Console.WriteLine(“後方一致していません”);
    }

    結果はtrueが返されるため、「後方一致しています」と出力されます。

    C#で複雑な文字列検索をする際に役立つ方法4選


    ここまではC#で文字列検索に使用するメソッドを紹介しましたが、ここからはC#で複雑な文字列検索をする際に役立つ方法について紹介していきます。

    指定した文字列が完全一致するか、というだけでは使いにくいことも多いです。これから紹介する方法を使えば、紹介したC#のメソッドと合わせて、大文字小文字の区別やかな、全角半角の区別、濁音などを無視して検索できるようになり、検索条件の幅を広げられます。

    さらに正規表現を組み合わせられれば、ワイルドカードを使用できるなど、詳細な検索条件を設定できるようになりますので、C#の文字列検索と合わせて学習してみましょう。

    1:大文字と小文字の区別をせずに検索する

    文字列検索では大文字と小文字の区別をせずに検索したい時もあるでしょう。そのやり方は以下の通りです。

    string str = “半角大文字のTEST、全角小文字のtest”;

    Console.WriteLine(str.IndexOf(“test”, StringComparison.OrdinalIgnoreCase));
    Console.WriteLine(str.IndexOf(“TEST”, StringComparison.OrdinalIgnoreCase));

    これを実行すると以下のように表示されます。

    6
    17

    IndexOfの第二引数にStringComparison.OrdinalIgnoreCaseを指定すれば、半角でも全角でも大文字小文字を無視した検索ができます。

    2:かなとカナ、全角と半角の区別をせずに検索する

    日本語の文字列の検索では、かなとカナの違いや全角・半角の違いを無視した検索をしたい時があるでしょう。C#ではCompareInfoを使えば可能です。以下が例になります。

    string str = “平仮名のてすと、全角のテスト”;

    System.Globalization.CompareInfo coinfo = System.Globalization.CultureInfo.CurrentCulture.CompareInfo;

    Console.WriteLine(coinfo.IndexOf(str, “テスト”, System.Globalization.CompareOptions.IgnoreKanaType));
    Console.WriteLine(coinfo.IndexOf(str, “テスト”, System.Globalization.CompareOptions.IgnoreWidth));

    かなとカナの違いを無視したい場合はIgnoreKanaTypeを、全角と半角の違いを無視したい場合はIgnoreWidthを指定します。結果は、以下になります。

    4
    11

    3:濁音無視、記号無視で検索する

    CompareInfoを使うと、以下のような非常に変わった検索をすることもできます。

    string str = “綺麗なガーベラ、かわいいチ?ュー!リ。ッ、プ”;

    System.Globalization.CompareInfo coinfo = System.Globalization.CultureInfo.CurrentCulture.CompareInfo;

    Console.WriteLine(coinfo.IndexOf(str, “カーヘラ”, System.Globalization.CompareOptions.IgnoreNonSpace));
    Console.WriteLine(coinfo.IndexOf(str, “チューリップ”, System.Globalization.CompareOptions.IgnoreSymbols));

    IgnoreNonSpaceを指定すると濁点を無視できます。IgnoreSymbolsを指定すると記号が無視されます。結果は以下になります。

    3
    12

    この機能を使う機会はなかなか無いと思いますが、頭の片隅に置いておくといつか役に立つかもしれません。

    4:正規表現を使って検索する

    C#は正規表現を使った高度な文字列検索も可能です。例えば以下のようなことができます。なおこれを実行する場合はソースの先頭に”using System.Text.RegularExpressions;”を追加してください。

    string str = “30歳の誕生日を迎えました!”;
    Console.WriteLine(Regex.IsMatch(str, “^[0-9][0-9].+誕生日|節目.+!$”));

    Regex.IsMatchの指定は「先頭が2桁の数字で、その後に1文字以上の文字列が続き、その後に”誕生日”か”節目”という言葉があって、その後に1文字以上の文字列が続き、最後が”!”で終わる」という意味です。

    これを実行するとTrueが表示されます。正規表現はとても奥が深く、マスターすれば非常に高度な文字列の検索ができるようになります。文字列検索を極めたい人は是非チャレンジしてみてください。

    C#の文字列検索を使いこなし転職に活かしましょう


    この記事では、C#の文字列検索について説明しました。

    C#は、Webアプリ開発やゲーム開発等でよく使用される言語で、これからもC#エンジニアの需要は続くとみられています。

    文字列検索をはじめ、C#の基礎的なメソッドを使いこなして転職活動に活かしていきましょう。

    C#エンジニア 案件・求人一覧はこちら

    ネプラス株式会社はサービス開始から10年以上
    『エンジニアの生涯価値の向上』をミッションに掲げ、
    多くのインフラエンジニア・ネットワークエンジニアの就業を支援してきました。
    ネプラス株式会社ロゴ

    ネプラス株式会社はこんな会社です

    秋葉原オフィスにはネプラス株式会社をはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • インフラ業界に特化

      インフラ業界に特化

      ネットワーク・サーバー・データベース等、ITインフラ業界に特化。Cisco Systemsプレミアパートナーをはじめ各種ベンダーのパートナー企業です。

      業界を知り尽くしているからこそ大手の取引先企業、経験豊富なエンジニアに選ばれています。

    • 正社員なのにフリーランスのような働き方

      正社員なのにフリーランスのような働き方

      正社員の方でも希望を聞いたうえでプロジェクトをアサインさせていただいており、フリーランスのような働き方が可能。帰社日もありません。

      プロジェクト終了後もすぐに次の案件をご紹介させていただきますのでご安心ください。

    • 大手直取引の高額案件

      大手直取引の高額案件

      案件のほとんどが大手SIerやエンドユーザーからの直取引のためエンジニアの皆様へに高く還元できています。

      Ciscoをはじめ、Juniper、Azure、Linux、AWS等インフラに特化した常時300件以上の案件があります。

    • スキルアップ支援

      スキルアップ支援

      不要なコストを削減し、その分エンジニアの方へのスキルアップ支援(ネットワーク機器貸出、合格時の受験費用支給など)や給与で還元しています。

      受験費用例)CCNP,CCIE:6-20万円、JNCIS:3-4万円、AWS:1-3万円など

      ※業務に関連する一定の資格のみ。各種条件がありますので詳しくは担当者へにお尋ねください。

    • 現給与を保証します!

      100%現給与保証

      前職の給与保証しており、昨年度は100%の方が給与アップを実現。収入面の不安がある方でも安心して入社していただけます。

      ※適用にはインフラエンジニアの業務経験1年以上、等一定の条件がございます。

    • インセンティブ制度

      インセンティブ制度

      ネットワーク機器の販売・レンタル事業等、売上に貢献いただいた方にはインセンティブをお支払いしています。

      取引先企業とエンジニア側、双方にメリットがあり大変好評をいただいています。

    • 社会保険・福利厚生

      社会保険・福利厚生

      社員の方は、社会保険を完備。健康保険は業界内で最も評価の高い「関東ITソフトウェア健康保険組合」です。

      さらに様々なサービスをお得に利用できるベネフィットステーションにも加入いただきます。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      ネプラスは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    ネプラス株式会社に興味を持った方へ

    ネプラス株式会社では、インフラエンジニアを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    オンライン面接も随時受付中。ぜひお気軽にご応募ください。

    ネプラス株式会社へのご応募はこちら↓
    ネプラス株式会社へのご応募はこちら↓