JavaA2Z

KAB-studio > プログラミング > JavaA2Z > substringとは

substring

日本語 部分文字列
英語 sub of string
ふりがな さぶすとりんぐ
フリガナ サブストリング

解説

文字列を分割するメソッド
Stringクラス及びStringBufferクラスメソッド
指定したインデックスナンバーから指定したインデックスナンバーまでの文字列を抜き出し、戻り値として返す。「分割」と言っても内部に保存してある文字列は変更されず、「分割後の文字列」を戻り値として返すだけである。
 
このメソッドにはオーバーロードによって引数1つのメソッド引数が2つのメソッドの2種類がある。
引数1つのメソッドは、指定したインデックスナンバー以降の文字列を全て返す。つまり、文字列の前半部分を消去し、後半部分だけを返すメソッドである。
引数2つのメソッドは、第1引数で指定したインデックスナンバーから、第2引数で指定したインデックスナンバーのひとつ前までの文字列を取得する。つまり文字列の左右を消去し、中間部分のみを返すメソッドである。
 
一般業務の多くでは、たとえば「ABC1234YZ」のような「固定文字数のコード」で商品やグループ等を区別することが多く、そのシステム化にあたり「コードを分解し、コード毎に異なる処理をする」ことが必要な場合がある。
たとえば「ABC1234YZ」といったコードの例の場合、中央の数字4文字が「商品コード」で、この商品コードだけを抜き取り画面表示をう、といったことが非常に多い。
こういった場合にsubstring()メソッドは非常に役立つことになる。
 
ただし、substring()メソッド引数の指定が少し複雑なこと、指定したインデックスナンバー文字列のサイズを超えるとIndexOutOfBoundsException例外投げられることなどといった難しい部分もある。
また、抜き出す機能はsubstring()メソッドでできるとしても、文字列が固定長でない場合や、複数の種類のコードが混在している場合に「どこからどこまでを抜き出せばいいのか」ということを調べるのが難しく、その調査結果を元にsubstring()メソッド呼び出す際のインデックスナンバーの指定方法も複雑になる傾向にあるという問題点もある。
これらの代替案として正規表現を用いた検索置換がある。正規表現には「正規表現そのものが難しい」「処理が重くなる傾向にある」ため、状況に応じてどちらを使用するか選択するのがいいだろう。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        String string = "あいうえお";
        // どの文字が「何番目か」を出力します。
        System.out.println( string.charAt( 0 ) );
        // あ
        System.out.println( string.charAt( 1 ) );
        // い
        System.out.println( string.charAt( 2 ) );
        // う
        System.out.println( string.charAt( 3 ) );
        // え
        System.out.println( string.charAt( 4 ) );
        // お

        // 文字のインデックスナンバーは、0から始まります。
        // つまり配列やコレクションと同じです。
        // また、Javaの文字列の文字コードはUnicodeなので、
        // 日本語の文字列でも1文字1要素です。

        // 引数ひとつのsubstring()メソッド。
        // 「指定したインデックスナンバー以降の文字列」を
        // 取得します。指定した文字列を含みます。
        System.out.println( string.substring( 3 ) );
        // えお

        // 引数ふたつのsubstring()メソッド。
        // 「第1引数のインデックスナンバーから、
        // 第2引数のインデックスナンバーのひとつ前の
        // 文字までの文字列」を取得します。
        // 第1引数の文字は含みますが、第2引数の文字は含みません。
        System.out.println( string.substring( 1, 3 ) );
        // いう

        // 引数ふたつのsubstring()メソッドは、
        // 「第2引数 - 第1引数 = 取り出す文字列の文字数」
        // になります。
        // また、第2引数に文字列の文字列数を渡すと、
        // 引数ひとつのものと同じ結果が返ります。
        // この機能を実現するために、第2引数は「ひとつ前の文字」に
        // なっています。
        System.out.println( string.substring( 1, string.length() ) );
        // いうえお

        // たとえば「後ろから2文字目まで」
        // (上記の例だと「あいうえ」)を取得したい場合。
        System.out.println( string.substring( 0, string.length() - 1 ) );
        // あいうえ

        // たとえば「先頭から2文字目から3文字」
        // (上記の例だと「いうえ」)を取得したい場合。
        System.out.println( string.substring( 1, 1 + 3 ) );
        // いうえ
        // 「1 + 3」の「1」は、第1引数で渡した「1」です。
        // この値が変数iの場合には「i + 3」とすればいいわけです。

        // ただし、第1引数はもちろん、第2引数も、文字列の範囲外を
        // 指定するとIndexOutOfBoundsException例外が投げられます。
        try
        {
            System.out.println( string.substring( 0, string.length() + 1 ) );
        }
        catch( IndexOutOfBoundsException e )
        {
            e.printStackTrace();
            // java.lang.StringIndexOutOfBoundsException: String index out of range: 6
            //     at java.lang.String.substring(String.java:1477)
            //     at Sample.main(Sample.java:64)
        }

        // そのため、第2引数で「固定の文字数で取得」する場合には
        // 文字数を取得して超えていないかチェックする必要があります。

        // 上記の例で分かると思いますが、substring()メソッドは
        // 中の文字列を変更しません。これはStringクラスの全メソッド
        // 共通の仕様です。
        System.out.println( string );
        // あいうえお
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        String string = "あいうえお";
        // どの文字が「何番目か」を出力します。
        System.out.println( string.charAt( 0 ) );
        // あ
        System.out.println( string.charAt( 1 ) );
        // い
        System.out.println( string.charAt( 2 ) );
        // う
        System.out.println( string.charAt( 3 ) );
        // え
        System.out.println( string.charAt( 4 ) );
        // お

        // 文字のインデックスナンバーは、0から始まります。
        // つまり配列やコレクションと同じです。
        // また、Javaの文字列の文字コードはUnicodeなので、
        // 日本語の文字列でも1文字1要素です。

        // 引数ひとつのsubstring()メソッド。
        // 「指定したインデックスナンバー以降の文字列」を
        // 取得します。指定した文字列を含みます。
        System.out.println( string.substring( 3 ) );
        // えお

        // 引数ふたつのsubstring()メソッド。
        // 「第1引数のインデックスナンバーから、
        // 第2引数のインデックスナンバーのひとつ前の
        // 文字までの文字列」を取得します。
        // 第1引数の文字は含みますが、第2引数の文字は含みません。
        System.out.println( string.substring( 1, 3 ) );
        // いう

        // 引数ふたつのsubstring()メソッドは、
        // 「第2引数 - 第1引数 = 取り出す文字列の文字数」
        // になります。
        // また、第2引数に文字列の文字列数を渡すと、
        // 引数ひとつのものと同じ結果が返ります。
        // この機能を実現するために、第2引数は「ひとつ前の文字」に
        // なっています。
        System.out.println( string.substring( 1, string.length() ) );
        // いうえお

        // たとえば「後ろから2文字目まで」
        // (上記の例だと「あいうえ」)を取得したい場合。
        System.out.println( string.substring( 0, string.length() - 1 ) );
        // あいうえ

        // たとえば「先頭から2文字目から3文字」
        // (上記の例だと「いうえ」)を取得したい場合。
        System.out.println( string.substring( 1, 1 + 3 ) );
        // いうえ
        // 「1 + 3」の「1」は、第1引数で渡した「1」です。
        // この値が変数iの場合には「i + 3」とすればいいわけです。

        // ただし、第1引数はもちろん、第2引数も、文字列の範囲外を
        // 指定するとIndexOutOfBoundsException例外が投げられます。
        try
        {
            System.out.println( string.substring( 0, string.length() + 1 ) );
        }
        catch( IndexOutOfBoundsException e )
        {
            e.printStackTrace();
            // java.lang.StringIndexOutOfBoundsException: String index out of range: 6
            //     at java.lang.String.substring(String.java:1477)
            //     at Sample.main(Sample.java:64)
        }

        // そのため、第2引数で「固定の文字数で取得」する場合には
        // 文字数を取得して超えていないかチェックする必要があります。

        // 上記の例で分かると思いますが、substring()メソッドは
        // 中の文字列を変更しません。これはStringクラスの全メソッド
        // 共通の仕様です。
        System.out.println( string );
        // あいうえお
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/05/01
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。