VB の Left, Mid, Right のように文字列を取り出す
スポンサーリンク
VB6 以前では、文字列の一部を取り出すために、Left, Mid, Right (Left$, Mid$, Right$) などの関数を使用していました。VB.NET 以降では、System.String クラスの Substring メソッドを使用することは、文字列の一部を取り出す でも紹介しました。
System.String クラスの Substring メソッドを使用せずとも、Microsoft.VisualBasic 名前空間には、VB6 と同じように Left, Mid, Right などの関数が用意されています。ただ、Microsoft.VisualBasic 名前空間の配下を使いたくない、VB 訛りのコーディングをしたくないという理由で使われなくなっています。
しかし、VB に慣れている方が、Substring を扱うと取り出し開始位置が Mid 関数と違うために混乱するようです。Substring メソッドの開始位置は 0 からの要素指定ですが、Mid 関数 は 1 からの文字位置指定です。
また、文字列の長さを超えた位置を選択した場合の対処が、考慮されていないことがあるみたいです。Left, Mid, Right 関数は、文字列の長さを越えた位置を選択しても例外は発生しませんが、Substring メソッドは例外が発生します。
素直に、Left, Mid, Right 関数を使うことができれば、こんなことは気にしなくても良いわけです。Microsoft.VisualBasic 名前空間の配下は使えないのであれば、Substring メソッドから自作すれば良いのです。
※本来は Substring メソッドを使うべきだとは思います。
サンプルコード
以下にサンプルコードを示します。
J# 全般
import System.*; /******************************************************************************** * * Microsoft.VisualBasic.Strings をカバーした静的クラスです。 * ********************************************************************************/ public class VBStrings { #region Left メソッド /******************************************************************************** * 文字列の左端から指定された文字数分の文字列を返します。 * * @param stTarget 取り出す元になる文字列。 * @param iLength 取り出す文字数。 * @return 左端から指定された文字数分の文字列。 * 文字数を超えた場合は、文字列全体が返されます。 ********************************************************************************/ public static final String Left(final String stTarget, final int iLength) { if (iLength <= stTarget.get_Length()) { return stTarget.Substring(0, iLength); } return stTarget; } #endregion #region Mid メソッド (+1) /******************************************************************************** * 文字列の指定された位置以降のすべての文字列を返します。 * * @param stTarget 取り出す元になる文字列。 * @param iStart 取り出しを開始する位置。 * @return 指定された位置以降のすべての文字列。 ********************************************************************************/ public static final String Mid(final String stTarget, final int iStart) { if (iStart <= stTarget.get_Length()) { return stTarget.Substring(iStart - 1); } return System.String.Empty; } /********************************************************************************************* * 文字列の指定された位置から、指定された文字数分の文字列を返します。 * * @param stTarget 取り出す元になる文字列。 * @param iStart 取り出しを開始する位置。 * @param iLength 取り出す文字数。 * @return 指定された位置から指定された文字数分の文字列。 * 文字数を超えた場合は、指定された位置以降のすべての文字列が返されます。 *********************************************************************************************/ public static final String Mid(final String stTarget, final int iStart, final int iLength) { if (iStart <= stTarget.get_Length()) { if (iStart + iLength - 1 <= stTarget.get_Length()) { return stTarget.Substring(iStart - 1, iLength); } return stTarget.Substring(iStart - 1); } return System.String.Empty; } #endregion #region Right メソッド /******************************************************************************** * 文字列の右端から指定された文字数分の文字列を返します。 * * @param stTarget 取り出す元になる文字列。 * @param iLength 取り出す文字数。 * @returns 右端から指定された文字数分の文字列。 * 文字数を超えた場合は、文字列全体が返されます。 ********************************************************************************/ public static final String Right(final String stTarget, final int iLength) { if (iLength <= stTarget.get_Length()) { return stTarget.Substring(stTarget.get_Length() - iLength); } return stTarget; } #endregion }
使用例は以下のようになります。
J# 全般
// 必要な変数を宣言する String stTarget = "ABCDEF"; // 左端から 4 文字の文字列を取得する MessageBox.Show(VBStrings.Left(stTarget, 4)); //ABCD // 左端から 2 文字目以降のすべての文字列を取得する MessageBox.Show(VBStrings.Mid(stTarget, 2)); //BCDEF // 左端から 2 文字目から 3 文字の文字列を取得する MessageBox.Show(VBStrings.Mid(stTarget, 2, 3)); //BCD // 右端から 4 文字の文字列を取得する MessageBox.Show(VBStrings.Right(stTarget, 4)); //CDEF
関連するリファレンス
準備中です。