2020年09月07日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 1020 count

【入門級】文字列の最後の1文字を取得する。最後の2文字を取得する

Written By: 川俣 晶連絡先

最後の1文字の判定と取得 §

 最後の1文字の判定はEndsWithメソッドを使うだけでできます。簡単です。

 しかし、取得はちょっと面倒です。

 LINQが使えない場合は長さを取得するLengthプロパティとインデクサの合わせ技で取得します。

 LINQが使える場合はLastメソッド一発で取得できます。

最後の2文字の判定と取得 §

 2文字になっても判定方法は変わりません。EndsWithメソッドで判定できます。

 問題は取得方法で、これは大きく変わります。

 LINQが使えない場合はSubstringメソッドで部分文字列を抜き出します。

 LINQが使える場合は最後のn文字を取得するTakeLastメソッドを使いますが、TakeLastメソッドはシーケンスを返すAPIであって文字列を返しません。そこで、配列に変換してからString型のコンストラクタに渡して文字列に置き換えます。

罠の数々 §

  • 最後の1文字を取得するとき、インデックスを計算する際に付ける-1に注意。インデックスは0から数えるので、最後の1文字が文字列の長さマイナス1になる
  • 同様に最後の2文字を取得するときの-2も注意
  • Substringメソッドは第2引数を省略すると最後まで取得してくれる。本来なら第2引数の値は2であるが略しても同じ結果なので略してある
  • Lastメソッドは取得するものが何もないと例外を発生させる。つまり空文字列に使うと必ず例外が起きる。LastOrDefaultメソッドを使えば例外が起きずに'\0'が返されるが、これでは最後の1文字が'\0'だったのか空文字列だったのか判定はできなくなる
  • TakeLastメソッドは比較的実装が最近なので、少し古いバージョンだと利用できない可能性がある。互換の都合でフレームワークが古いプロジェクトが注意。(実装されているのは.NET Core系の比較的新しいバージョンのみ)
  • LINQを使わない方法の方が高速に処理できる可能性がある。速度が重要な場合は注意しよう
  • LINQを使わないで最後の2文字を取得する方法は、LINQを使う方法より短いが、-2というマジックナンバーが出現する弱点がある。TakeLastメソッドの引数の2は、【最後の2文字】の2なのでマジックナンバーではあるが読み取りやすい数字である

参考リンク §

String.EndsWith メソッド

String.Length プロパティ

String.Substring メソッド

Enumerable.Last メソッド

Enumerable.TakeLast メソッド

リポジトリ §

https://github.com/autumn009/cshowto

StringEnd §

using System;

using System.Linq;

class Program

{

    static void Main()

    {

        const string src = "吉良瞳子";

        // 最後の1文字が指定の文字か判定する

        if (src.EndsWith("子")) Console.WriteLine("文字列の最後の1文字は【子】です。");

        // LINQを使わない方法で最後の1文字を取得する

        char ch1 = src[src.Length - 1];

        Console.WriteLine($"文字列の最後の1文字は【{ch1}】です。");

        // LINQを使う方法で最後の1文字を取得する

        char ch2 = src.Last();

        Console.WriteLine($"文字列の最後の1文字は【{ch2}】です。");

        // 最後の2文字が指定の文字か判定する

        if (src.EndsWith("瞳子")) Console.WriteLine("文字列の最後の2文字は【瞳子】です。");

        // LINQを使わない方法で最後の2文字を取得する

        string s1 = src.Substring(src.Length - 2);

        Console.WriteLine($"文字列の最後の2文字は【{s1}】です。");

        // LINQを使う方法で最後の2文字を取得する

        string s2 = new string(src.TakeLast(2).ToArray());

        Console.WriteLine($"文字列の最後の2文字は【{s2}】です。");

    }

}

実行結果

文字列の最後の1文字は【子】です。

文字列の最後の1文字は【子】です。

文字列の最後の1文字は【子】です。

文字列の最後の2文字は【瞳子】です。

文字列の最後の2文字は【瞳子】です。

文字列の最後の2文字は【瞳子】です。

Facebook

COOL C# CREW

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

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
09月
08日
【入門級】同じオブジェクトに含まれる同じ名前のメソッドを使い分ける
3days 0 count
total 1087 count
【C# コーディング How To】の前のコンテンツ
2020年
09月
06日
【入門級】文字列中の1文字を2文字で置換する
3days 0 count
total 915 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20200907093836
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.