String

 Stringクラスは Objectクラスの直接のサブ・クラスです。 java.langパッケージに含まれます。 Stringは文字列を表すクラスです。 単なる文字の配列ではなく文字列を操作するための基本的なメソッドも提供します。 Stringクラスには publicな変数は存在しません。 Stringクラスのデータから特定の文字や文字配列のデータを取り出すには、 後述の専用のメソッドを用います。

Stringクラスのメソッド

 Stringクラスには、 引数の区別もすると 7個のコンストラクタと 40個余りのメソッドが定義されています。 メソッドの目的ごとに以下の項目のようにグループ分けして解説します。

  1. コンストラクタ
  2. 文字の情報を取り出すメソッド
  3. 他の型のデータをStringのオブジェクトに変換するメソッド
  4. 文字列の長さと比較のメソッド
  5. 文字列内の検索のメソッド
  6. 文字列内の置換のメソッド
  7. 文字列の連結と分解のメソッド
  8. オブジェクト自身の情報を取り出すためのメソッド

コンストラクタ

 Stringのオブジェクトは、StringおよびStringBufferのオブジェクト、 char型の配列、byte型の配列を元に、生成することができます。 配列を与える場合は開始のインデックスと文字数を与えて、 配列の一部分を利用することもできます。 byte型のデータを元にする場合は、 共通する上位のバイトの値を第2引数に指定します。 char型の配列から String型のデータを生成する場合には、 その配列が privateなデータとしてそのまま利用されます。 ただし元の配列になんらかの変更が生じた場合には、 配列の内容はその時点でコピーされ Stringのオブジェクトの内容には 影響しません。
 なお Stringクラスのオブジェクトは非常にしばしば使用されるため、 特別に引用符≪ " " ≫による生成も可能になっています。 以下に示す Stringオブジェクト生成の例は、いずれも同じ意味です。

  String  str1 = new String("ABCDEFG");
  String  str2 = "ABCDEFG";

 int型などの他の型のデータを元に Stringのオブジェクトを生成するには、 後述の staticなメソッド valueOf()が利用できます。

文字の情報を取り出すメソッド

 charAt()メソッドは、指定したインデックスの位置にある文字の値を返します。 getChars()メソッドは、指定した範囲の文字列のデータを、用意した char型の配列の内部に格納します。 第4引数は配列の格納先の先頭のインデックスです。 getBytes()メソッドは、指定した範囲の文字列のデータを、用意した byte型の配列の内部に格納します。 第4引数は配列の格納先の先頭のインデックスです。 toCharArray()メソッドは文字列全体を新しい char型の配列にコピーします。 このメソッドは新しい配列を自動的に生成します。 substring()メソッドは、Stringのオブジェクト内の 指定された範囲の区間を新しい Stringオブジェクトとして返します。 (ただしオブジェクト全体を範囲に指定した場合は、 新しいオブジェクトの生成は行わず自分自身を返します。)

他の型のデータをStringのオブジェクトに変換するメソッド

 valueOf()メソッドは、与えられた型のデータを Stringのオブジェクトに 変換して返します。staticなメソッドです。 なお、記号≪ + ≫は Stringのオブジェクトと原始型のデータを 連結して結果を新しい Stringのオブジェクトとします。 データの値が文字列の一部として用いられる場合には、valueOf()メソッドを 明示的に使わなくてもかまいません。 以下に示す Stringオブジェクト生成の例は、いずれも同じ意味です。

  int x = 100;
  String  str1 = "x=" + String.valueOf(x);
  String  str2 = "x=" + x;

 厳密に言うと《 + 》演算子は StringBufferクラスの appendメソッドです。 しかし、上の例のように見かけ上は Stringクラスの演算子として 考えてかまいません。
 valueOf()に char型の配列を与えた場合には、 データとして利用する範囲を、先頭のインデックス及び文字数を引数に与えて 指定することができます。 char型の配列から String型のデータを生成する場合には、 その配列が privateなデータとしてそのまま利用されます。 ただし元の配列になんらかの変更が生じた場合には、 配列の内容はその時点でコピーされ、Stringのオブジェクトの内容には 影響しません。 String.valueOf(char[])は new String(char[])と全く同じです。 Stringのオブジェクトを生成する時に最初から char型の配列を コピーするように明示的な指定をする場合には、copyValueOf()メソッドを 利用します。いずれのメソッドによって生成されたオブジェクトも 見かけの振る舞いは同じです。 (違いが生じるとしたら、たとえば非常に長いテキストの内容を 読み取り専用で利用するようなケースでしょう。)
 valueOf()メソッドには、 任意のクラスのオブジェクトを引数に与えることができます。 結果は各クラスで定義された toString()メソッドが呼ばれた場合と同じです。 ただし String.valueOf(Objetct)は null の オブジェクトが与えられてもエラーにならず、 きちんと nullを返してくれます。

文字列の長さと比較のメソッド

 length()メソッドは文字列の長さを返します。 値は char型の配列の長さであり、バイト数ではありません。 (Java言語では全ての文字は2バイトであり、1バイト文字と2バイト文字の 区別はありません。) equals()メソッドは、 Stringのオブジェクトと引数に与えられた オブジェクトの Stringオブジェクトとしての情報とが一致した場合に true を、 一致しない場合には false を返します。 Stringのオブジェクトが引数に与えられた場合は、 もちろん文字列どうしの比較になります。 equalsIgnoreCase()メソッドは、Stringのオブジェクトと引数に 与えられた Stringのオブジェクトを大文字小文字の違いを無視して比較し、 一致すれば true を一致しない場合は false を返します。 compareTo()メソッドは、Stringのオブジェクトと引数に与えられた Stringのオブジェクトを比較し、 「大小関係」を返値である int型の数値の符号で示します。 符号は不一致の文字のコードの値の差を計算して求められます。 一致した時に 0が返る以外は返される数値の値は不定です。 また大文字小文字も含めて「辞書の順」に比較されるわけではありません。 resionMaches()メソッドは、Stringのオブジェクトのある特定の範囲を、 引数の中に与えられた Stringのオブジェクトの特定の範囲と比較し、 一致した場合は true を一致しなければ false を返します。 それぞれの文字列の比較の範囲の先頭のインデックスと範囲の長さも引数に 指定します。また、先頭の引数に大文字小文字の違いを無視するかどうかを 指定することもできます。

文字列内の検索のメソッド

 startsWith()及びendsWith()メソッドは、 Stringのオブジェクトが指定された Stringのオブジェクトによって 開始または終了しているかをチェックします。 startsWith()はチェックの開始のインデックスを第2引数に指定できます。
 indexOf()メソッドは Stringのオブジェクトの文字列内を検索し、 指定された文字または文字列が存在する最初の場所のインデックスを返します。  lastIndexOf()メソッドは indexOf()メソッドと同様の検索を、 文字列の末尾から先頭に向けて行います。 いずれのメソッドも検索対象が存在しない場合は -1 を返します。 いずれのメソッドも検索開始のインデックスを第2引数に指定することができます。

文字列内の置換のメソッド

 replace() メソッドは、文字列の中にある第1引数の文字を、 第2引数の文字に置き換え、その結果の Stringクラスのオブジェクトを返します。
 toLowerCase() メソッドは文字列内の大文字を小文字に変換します。 toUpperCase() メソッドは文字列内の小文字を大文字に変換します。

文字列の連結と分解のメソッド

 concat()メソッドは、引数に指定した文字列を自分自身の後ろに連結し、 その結果生じる Stringクラスのオブジェクトを返します。
 trim()メソッドは文字列中の空白文字を取り除き、その結果の Stringクラスの オブジェクトを返します。

オブジェクト自身の情報を取り出すためのメソッド

 hashCode() メソッドはオブジェクトのハッシュ・テーブルの int型の値を返します。 toString() はオブジェクトを Stringクラスに変換した結果、すなわち 自分自身を返します。 (このメソッドが定義されているのは、すべてのクラスは Object クラスで定義された toString()メソッドを継承し、それぞれのクラスに応じて実装しなければならない からです。)
 intern()メソッドも自分自身と同じ文字列を返します。 intern()メソッドによって返される文字列の ID は、 その内容によって一意に決まるようになっています。 したがって、次のような形式で2つの文字列の比較を行うことができます。

  s1.intern() == s2.intern()
これは s1.equals(s2) と同じ意味になります。上のような形式の方が 「見やすい」と考える人も多いでしょう。