文字列クラス

  1. 目的

    文字列生成を行う String クラスと、文字列を編集する StringBuffer クラスを紹介します。

  2. 利用法

    1. 文字列定義と+演算

      Javaは2バイトのunicodeで文字を記録します。文字列を定義するには String クラスを利用します。
           String st = "abcdef";
       この方法は簡便な方法で new なしでオブジェクトを生成しているので、intやfloat型のプリミティブ型と同様Javaが特殊扱いしているクラスです。二つの文字列は + 演算で連結できますが、これも、演算子 + の拡張機能となっています。
       String st="123";
       st=st+"abc";
       + 演算は文字列とintやfloatなどの数値が混合した場合、左の型にあわせて演算します。この場合は、i を文字列に変換し連結します。
       int i = 10;
       st = "i=" + i;// i=10

    2. 文字列出力

      アプリケーションで実行している場合、String型変数 sb は、
           System.out.println("replace:"+sb);
      でコマンドウインドウに表示できます。アプレットの場合、IEのツールメニューから、「SunのJava コンソール」を」チェックすると、表示可能です。

    3. 文字列の比較

       文字列の比較は、== や >= の演算子ではできません。
           String st1="123",st2="abc";
      としたとき、st1>=st2 は文字列への参照子(C言語のポインタ、記憶するメモリの番地に相当)の比較となります。文字列が同じであるかは
           st.equals("3a")
      のように、Stringクラスのequals メソッドを利用します。
           equalsIgnoreCase("3A")
      では、大文字小文字を無視して比較します。
       辞書的な大小関係を調べるには
           compareTo()
      を利用します。結果はint型で、小さいとき負、等しいとき0、多きとき正になります。

    4. 文字列の変換

       スレッドで文字列の長さを変更するような処理は、StringBufferクラスを利用する方が安全です。Stringクラスと分離したのは、多分、メモリ管理を配慮したためと思われます。
       文字列の先頭と最後を指定して文字列を入れ替えるには、replace() を利用します。文字列の長さが変化してもかまいません。
           StringBuffer sb=new StringBuffer("from Toyota to Nagoya");
           sb=sb.replace(5,11,"Handa");
           System.out.println("replace:"+sb);

    5. その他のメソッド

      String、StringBuffer、共に多くのメソッドがあります。以下は、SUN社が提供する、クラスライブラリのマニュアルです
       http://java.sun.com/j2se/1.4/ja/docs/ja/api/index.html
      Stringクラスの他の、メソッドを調べてください。

  3. プログラム例

    1. プログラム


      public class string {
      
          public static void main(String[] args) {
              String st="123";
              //文字列の結合
              st=st+"abc";
              System.out.println(st);
      
              st=st.substring(2,4);
              System.out.println(st+":"+st.length());
              
              //比較
              //==はオブジェクトの番地で判断する 以下は失敗する
              if(st=="3a") System.out.println("== ");
      
              //文字列の同等判断は equals を使う
              if(st.equals("3a"))System.out.println("equals");
              if(st.equalsIgnoreCase("3A"))System.out.println("equals 大/小文字無視");
              
              //文字の書き換え
              StringBuffer sb=new StringBuffer("from Toyota to Nagoya");
              sb=sb.replace(5,11,"Handa");
              System.out.println("replace:"+sb);      
          }
      }

      実行結果
      123abc
      3a:2
      equals
      equals 大/小文字無視
      replace:from Handa to Nagoya

  4. 問題


    1. 部分文字列

       文字列st(長さ7文字以上)の前の3文字と後ろの3文字を接続した文字列を表示するプログラムを作成して下さい。部分文字列を取り出すメソッドは SUN社 のドキュメントを参考にして下さい。

    2. 文字列の並べ替え

       文字列の配列を定義し、それを辞書的順序に並べ替えるプログラムを作成しなさい。