■Java言語の基本 - java.lang.String -

■まっしぐらじゃば > ■Java言語の基本

  このページではJava言語で最も良く使うStringについて書きます。 実はString型良く使うのですが、意外と奥深いんです。

■目次

■Stringオブジェクトの作成

    Stringオブジェクトは主に以下の方法で作ることが出来ます。

  1. newして作成する。
  2. 文字列を代入して作成する。
  3. 文字列を引数にして作成する。

    基本は、他のオブジェクトと同じようにStringオブジェクトもnewを用いて作成します。

String str0 = new String();
    Stringオブジェクトのインスタンス生成は以下のように書いても生成されます。
String str1 = "string";
    以下のような形式でも、もちろんOKです。
String str2 = new String(str1);

TOPへ戻る

■Stringオブジェクトの結合

    Stringオブジェクトは+演算子もしくはconcat()で結合できます。

/* Stringを結合します。 */
    String str3 = "aaa";
    String str4 = "bbb";
    System.out.println(str3 + str4);
    以下の方法でも文字列結合は出来ます。
System.out.println(str3.concat(str4));
    ただしもっと一般的な方法があります。それはStringBufferを使う方法で、またの機会に書きます。

TOPへ戻る

■Stringオブジェクトの長さを取得する

    Stringオブジェクトの長さを取得する方法は簡単です。length()を呼び出します。

/* Stringの文字列の長さを取ります。 */
    System.out.println(str3.length());
    面白い点は、この長さはバイト長じゃなく、あくまで文字列の長さなのです。
/* 文字列の長さはきちんと文字列分で測られています。 */
    String str3_1 = "ああああああ";
    System.out.println(str3_1.length());

/* 小文字大文字が混在しても大丈夫です。 */
    String str3_2 = "あああああaaaaa";
    System.out.println(str3_2.length());

TOPへ戻る

■文字列の切り出し

    文字列の切り出しはsubstring()を使います。ただしsubstring()は少し癖のあるメソッドです。
    substring(開始位置(0から始まる),終了位置+1)で指定します。普通に考えれば、substring(開始位置,終了位置)で終わって欲しいところです・・・(^_^;)
    下の例では、文字列"123456"から"123"を切り出します。

/* 文字列の切り出し1 */
    String str5 = "123456";
    System.out.println(str5.substring(0,3));

    以下の二つは同じ意味です。4番目の文字から終わりまでを切り出します。 終わり位置が文字列の最後の場合、指定する必要はありません。

/* 文字列の切り出し2 */
    System.out.println(str5.substring(3,6));
    System.out.println(str5.substring(3));

TOPへ戻る

■Stringオブジェクトの比較

    JavaではStringはintやlongなどの基本型(プリミティブ型)ではなく、クラスとして扱います。
    基本型の比較は「==」を用いて行いますが、オブジェクト型(クラス)はequals()を用いて行います。
    (実際equals()は全てのオブジェクトの親クラスObjectのメソッドなのですが、Stringで用いる事が多いため、ここで書いておきます。
    Objectのところでは内容比較のところなどをもう少し詳しく書きたいと思います。)

/* Stringオブジェクトの比較 */
    String str6 = "abc";
    String str7 = "ab";
    str7 = str7 + "c";
    if(str6.equals(str7)){
        System.out.println("match.");
    }

    Stringで比較するときに、比較する対象が固定の文字列なんかの場合が良くあります。
    その場合、NullPointerExceptionを出させるか素通りさせるかで書き方を変える事が出来ます。(例外を出すか出さないかは実装指針などに依ります。)
    以下の例はstr6_2にnullが入ることを想定しない場合の書き方です。

/* この例だとNullPointerExceptionが発生します。 */
    String str6_2 = null;
    if(str6_2.equals("aaa")){
        System.out.println("match.");
    }else{
        System.out.println("unmatch.");
    }

    一方こちらはstr6_2がnull値を取ることを許容する場合の書き方です。

/* NullPointerExceptionが発生せず、else文に入ります。 */
    String str6_2 = null;
    if("aaa".equals(str6_2)){
        System.out.println("match.");
    }else{
        System.out.println("unmatch.");
    }

    個人的には、めんどいですが正確な記述をする以下の方法が無難かなと思います。

    String str6_2 = null;
    if(str6_2 != null && str6_2.equals("aaa")){
        System.out.println("match.");
    }else{
        System.out.println("unmatch.");
    }

TOPへ戻る

■文字列の分割

    文字列の分割はsplit()を用います(Perlなどのスクリプト言語では良くありますね、このメソッド(^_^))。
    分割された文字列は、Stringの配列になります。分割するのに必要な引数は通常の文字列もしくは正規表現になります。
    以下の例はドット(.)で文字列を分割しています。(ちなみにこのsplitメソッドはJ2SE1.4以降でしか使えません。)

    String str8 = "www.yahoo.co.jp";
    /* 通常そのままドット(.)と書くと正規表現の一部と勘違いされます。この場合は文字"."なので\\でエスケープさせています。 */
    String[] strs1 = str8.split("\\.");
    for(int i=0;i<strs1.length;i++){
        System.out.println(strs1[i]);
    }

    以下の例では文字"b"で分割しています。以下で返ってくる文字列は{"a","c","d","e"}と思いきや、{"a","","","c","d","e"}となります。
    "bbb"のようにマッチさせる文字が連続した場合は、はじめのbだけがマッチさせる文字列として使われ、以降はブランクに置き換えられ、分割されます。

/* 分割させる文字列が複数個並んだ場合 */
    String str9 = "abbbcbdbeb";
    String[] strs2 = str9.split("b");
    for(int i=0;i<strs2.length;i++){
        System.out.println(strs2[i]);
    }

TOPへ戻る


■TODO


■変更履歴




(C) 2004 Shot
[FOAF]

免責:このページの内容は私個人の意見及び考えであり、ページの内容に対して一切の責任を負いません。
ツッコミ・叱咤激励等は常時大歓迎です。ぜひこちらの掲示板までどうぞ