String
Stringクラスは Objectクラスの直接のサブ・クラスです。
java.langパッケージに含まれます。
Stringは文字列を表すクラスです。
単なる文字の配列ではなく文字列を操作するための基本的なメソッドも提供します。
Stringクラスには publicな変数は存在しません。
Stringクラスのデータから特定の文字や文字配列のデータを取り出すには、
後述の専用のメソッドを用います。
Stringクラスのメソッド
Stringクラスには、
引数の区別もすると 7個のコンストラクタと 40個余りのメソッドが定義されています。
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- コンストラクタ
- 文字の情報を取り出すメソッド
- 他の型のデータをStringのオブジェクトに変換するメソッド
- 文字列の長さと比較のメソッド
- 文字列内の検索のメソッド
- 文字列内の置換のメソッド
- 文字列の連結と分解のメソッド
- オブジェクト自身の情報を取り出すためのメソッド
コンストラクタ
- public String()
- public String(String value)
- public String(StringBuffer buffer)
- public String(char value[])
- public String(char value[], int offset, int length)
- public String(byte ascii[], int hibyte)
- public String(byte ascii[], int hibyte, int offset, int length)
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()が利用できます。
文字の情報を取り出すメソッド
- public char charAt(int index)
- public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)
- public void getBytes(int srcBegin, int srcEnd, byte dst[], int dstBegin)
- public char[] toCharArray()
- public String substring(int beginIndex)
- public String substring(int beginIndex, int endIndex)
charAt()メソッドは、指定したインデックスの位置にある文字の値を返します。
getChars()メソッドは、指定した範囲の文字列のデータを、用意した
char型の配列の内部に格納します。
第4引数は配列の格納先の先頭のインデックスです。
getBytes()メソッドは、指定した範囲の文字列のデータを、用意した
byte型の配列の内部に格納します。
第4引数は配列の格納先の先頭のインデックスです。
toCharArray()メソッドは文字列全体を新しい char型の配列にコピーします。
このメソッドは新しい配列を自動的に生成します。
substring()メソッドは、Stringのオブジェクト内の
指定された範囲の区間を新しい Stringオブジェクトとして返します。
(ただしオブジェクト全体を範囲に指定した場合は、
新しいオブジェクトの生成は行わず自分自身を返します。)
他の型のデータをStringのオブジェクトに変換するメソッド
- public static String valueOf(boolean b)
- public static String valueOf(char c)
- public static String valueOf(int i)
- public static String valueOf(long l)
- public static String valueOf(float f)
- public static String valueOf(double d)
- public static String valueOf(char data[])
- public static String valueOf(char data[], int offset, int count)
- public static String valueOf(Object obj)
- public static String copyValueOf(char data[])
- public static String copyValueOf(char data[], int offset, int count)
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を返してくれます。
文字列の長さと比較のメソッド
- public int length()
- public boolean equals(Object object)
- public boolean equalsIgnoreCase(String other)
- public int compareTo(String other)
- public boolean regionMatches(int toffset, String other, int ooffset, int len)
- public boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
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 を返します。
それぞれの文字列の比較の範囲の先頭のインデックスと範囲の長さも引数に
指定します。また、先頭の引数に大文字小文字の違いを無視するかどうかを
指定することもできます。
文字列内の検索のメソッド
- public boolean startsWith(String str)
- public boolean startsWith(String str, int offset)
- public boolean endsWith(String str)
- public int indexOf(int ch)
- public int indexOf(int ch, int fromIndex)
- public int indexOf(String str)
- public int indexOf(String str, int fromIndex)
- public int lastIndexOf(int ch)
- public int lastIndexOf(int ch, int fromIndex)
- public int lastIndexOf(String str)
- public int lastIndexOf(String str, int fromIndex)
startsWith()及びendsWith()メソッドは、
Stringのオブジェクトが指定された Stringのオブジェクトによって
開始または終了しているかをチェックします。
startsWith()はチェックの開始のインデックスを第2引数に指定できます。
indexOf()メソッドは Stringのオブジェクトの文字列内を検索し、
指定された文字または文字列が存在する最初の場所のインデックスを返します。
lastIndexOf()メソッドは indexOf()メソッドと同様の検索を、
文字列の末尾から先頭に向けて行います。
いずれのメソッドも検索対象が存在しない場合は -1 を返します。
いずれのメソッドも検索開始のインデックスを第2引数に指定することができます。
文字列内の置換のメソッド
- public String replace(char oldChar, char newChar)
- public String toLowerCase()
- public String toUpperCase()
replace() メソッドは、文字列の中にある第1引数の文字を、
第2引数の文字に置き換え、その結果の Stringクラスのオブジェクトを返します。
toLowerCase() メソッドは文字列内の大文字を小文字に変換します。
toUpperCase() メソッドは文字列内の小文字を大文字に変換します。
文字列の連結と分解のメソッド
- public String concat(String str)
- public String trim()
concat()メソッドは、引数に指定した文字列を自分自身の後ろに連結し、
その結果生じる Stringクラスのオブジェクトを返します。
trim()メソッドは文字列中の空白文字を取り除き、その結果の Stringクラスの
オブジェクトを返します。
オブジェクト自身の情報を取り出すためのメソッド
- public int hashCode()
- public String toString()
- public String intern()
hashCode() メソッドはオブジェクトのハッシュ・テーブルの int型の値を返します。
toString() はオブジェクトを Stringクラスに変換した結果、すなわち
自分自身を返します。
(このメソッドが定義されているのは、すべてのクラスは Object クラスで定義された
toString()メソッドを継承し、それぞれのクラスに応じて実装しなければならない
からです。)
intern()メソッドも自分自身と同じ文字列を返します。
intern()メソッドによって返される文字列の ID は、
その内容によって一意に決まるようになっています。
したがって、次のような形式で2つの文字列の比較を行うことができます。
s1.intern() == s2.intern()
これは s1.equals(s2) と同じ意味になります。上のような形式の方が
「見やすい」と考える人も多いでしょう。