java.lang.String

java.lang.String は変更できない文字列(定数)を表すクラスです。インスタンスを作成した後に文字列の内容を変更することはできません。

java.lang.Stringのクラス図
Figure 1. java.lang.Stringのクラス図

Javaで文字列を表すクラスと、その違いを以下に示す。

Javaの文字列
クラス 文字列の変更 スレッド・セーフ
java.lang.String
java.lang.StringBuffer
java.lang.StringBuilder

目次

  1. 1 スーパークラス
  2. 2 実装インタフェース
  3. 3 コンストラクタ
  4. 4 メソッド
    1. 4.1 compareTo
    2. 4.2 compareToIgnoreCase
    3. 4.3 equals
    4. 4.4 equalsIgnoreCase
    5. 4.5 getBytes
    6. 4.6 indexOf
    7. 4.7 isEmpty
    8. 4.8 lastIndexOf
    9. 4.9 length
    10. 4.10 matches
    11. 4.11 replace
    12. 4.12 replaceAll
    13. 4.13 split
    14. 4.14 substring
    15. 4.15 trim
    16. 4.16 valueOf
  5. 5 文字列から他のデータ型へ変換
    1. 5.1 Byte.parseByte
    2. 5.2 Byte.valueOf
    3. 5.3 Double.parseDouble
    4. 5.4 Double.valueOf
    5. 5.5 Float.parseFloat
    6. 5.6 Float.valueOf
    7. 5.7 Integer.parseInt
    8. 5.8 Integer.valueOf
    9. 5.9 Long.parseLong
    10. 5.10 Long.valueOf
    11. 5.11 Short.parseShort
    12. 5.12 Short.valueOf
  6. 6 他のデータ型から文字列へ変換
    1. 6.1 Byte.toString
    2. 6.2 Double.toString
    3. 6.3 Float.toString
    4. 6.4 Intger.toString
    5. 6.5 Long.toString
    6. 6.6 Short.toString

1 スーパークラス

java.lang.Object

2 実装インタフェース

java.lang.CharSequence

java.lang.Comparable<String>

java.io.Serializable

3 コンストラクタ

public String()

空の文字列で初期化した String のインスタンスを新たに生成する。

public String(String original)

指定された String のインスタンスで初期化した String のインスタンスを新たに生成する。つまり、インスタンスのコピーを作成する。

public String(char[] value)

指定された配列で初期化した String のインスタンスを新たに生成する。

public String(byte[] bytes)

指定されたバイト配列で初期化した String のインスタンスを新たに生成する。

public String(StringBuffer buffer)

指定された文字列バッファ (StringBuffer) で初期化した String のインスタンスを新たに生成する。

public String(StringBuilder builder)

指定された文字列ビルダー (StringBuffer) で初期化した String のインスタンスを新たに生成する。

コンストラクタの使用例を以下に示す。

class Example {
  public static void main(String[] args) {
    char chars[] = {'f', 'o', 'o'};
    byte bytes[] = {'b', 'a', 'r'};
    String s1 = new String();
    String s2 = new String("baz");
    String s3 = new String(chars);
    String s4 = new String(bytes);
    String s5 = new String(new StringBuffer("foo"));
    String s6 = new String(new StringBuilder("bar"));
  }
}

String には様々なコンストラクタが用意されているが、他の型やクラスから変換する場合を除いて、あまり使われることはない。

文字列リテラルは String のインスタンスであるため、String 型の変数に代入することで生成してもよい。簡潔に記述できるうえ、インタンスのコピーが発生しないため、一番よく使われる方法である。

String s = "example";

4 メソッド

4.1 String.compareTo

2つの文字列を辞書的に比較して、等しい場合は0、小さい場合は0より小さい値、大きい場合は0より大きい値を返す。

int compareTo(String anotherString)
anotherString
比較する文字列

文字列を大小比較する例を以下に示す。

public class Example {
  public static void main(String[] args) {
    String s1 = "compare";
    String s2 = "Compare";

    int n = s1.compareTo(s2);

    if (n == 0) {
      System.out.println(s1 + " equals " + s2);
    } else if (n < 0){
      System.out.println(s1 + " is less than " + s2);
    } else {
      System.out.println(s1 + " is greater than " + s2);
    }
  }
}

文字列リテラルであっても、compareTo メソッドを利用できる。

public class Example {
  public static void main(String[] args) {

    int n = "Compare".compareTo("compare");

    if (n == 0) {
      System.out.println("'Compare' equals 'compare'");
    } else if (n < 0){
      System.out.println("'Compare' is less than 'compare'");
    } else {
      System.out.println("'Compare' is greater than 'compare'");
    }
  }
}

4.2 String.compareToIgnoreCase

2つの文字列を辞書的に比較して(大文字と小文字は区別しない)、等しい場合は0、小さい場合は0より小さい値、大きい場合は0より大きい値を返す。

int compareToIgnoreCase(String anotherString)
anotherString
比較する文字列

文字列を大文字と小文字の区別をせずに大小比較する例を以下に示す。

public class Example {
  public static void main(String[] args) {
    String s1 = "compare";
    String s2 = "Compare";

    int n = s1.compareToIgnoreCase(s2);

    if (n == 0) {
      System.out.println(s1 + " equals " + s2);
    } else if (n < 0){
      System.out.println(s1 + " is less than " + s2);
    } else {
      System.out.println(s1 + " is greater than " + s2);
    }
  }
}

文字列リテラルであっても、compareToIgnoreCase メソッドを利用できる。

public class Example {
  public static void main(String[] args) {

    int n = "Compare".compareToIgnoreCase("compare");

    if (n == 0) {
      System.out.println("'Compare' equals 'compare'");
    } else if (n < 0){
      System.out.println("'Compare' is less than 'compare'");
    } else {
      System.out.println("'Compare' is greater than 'compare'");
    }
  }
}

4.3 String.equals

boolean equals(Object o)

Stringクラスの文字列を比較するには、equalsメソッドを使用する。

public class Sample {
  public static void main(String[] args) {

      String str = "Java";

      if ((str != null) && str.equals("Java")) {
          System.out.println("文字列が一致します。");
      } else {
          System.out.println("文字列が一致しません。");
      }
  }
}

文字列リテラルの場合もequalsメソッドを使用することができる。

public class Sample {
  public static void main(String[] args) {

      String str = "Java";

      if ("Java".equals(str)) {
          System.out.println("文字列が一致します。");
      } else {
          System.out.println("文字列が一致しません。");
      }
  }
}

4.4 String.equalsIgnoreCaseメソッド

指定した文字列と一致するかどうかを返す。比較の際には大文字と小文字を区別しない。

boolean equalsIgnoreCase(String s)
s
比較する文字列

4.5 String.getBytes

byte[] getBytes

デフォルトの言語セットを使用して、文字列をバイト配列に変換して返す。

byte[] getBytes(Charset charset)
byte[] getBytes(String charset)

指定した文字セットを使用して、文字列をバイト配列に変換して返す。

文字列からバイト列へ変換するには、StringクラスのgetBytesメソッドを使用する。

public byte[] getBytes()

文字列からバイト列へ変換する例を示す。

String s = "12345";
byte b[] = s.getBytes();

データ型から文字列に変換するサンプル・プログラム Convert.java を次に示します。

class Convert {
  public static void main(String args[]) {
    String s;
    int i = 255;
    s = String.valueOf(i);
    s = Integer.toString(i);
  }
}

4.6 String.indexOf

int indexOf(int ch)

この文字列内で、指定された文字が最初に出現する位置のインデックスを返す。

int indexOf(String s)

この文字列内で、指定された部分が最初に出現する位置のインデックスを返す。

4.7 String.isEmpty

boolean isEmpty()

文字列の長さが0の場合はtrue、0以外の場合はfalseを返す。

String s = "foo";
if (s != null && !s.isEmpty())
{
  // 文字列sを使った処理
}

4.8 String.lastIndexOf

指定した文字又は文字列が最後に出現する位置を返す。

int lastIndexOf(int ch)
int lastIndexOf(int ch, int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)

4.9 String.length

文字列の長さを文字数で返す。

int length()
class StringLengthExample {
public static void main(String[] args) {
  String s = "文字列String";
  System.out.println(s.length());
}
}

4.10 String.matches

文字列が指定した正規表現に合致すればtrue、合致しなければfalseを戻り値として返す。

boolean matches(String regex)
regex

文字列と比較する正規表現を指定する。

文字列が正規表現にマッチするかどうかを判定する例を示す。

String str = "1,12,300";

if (str.matches("^[1-9][0-9]*(,[1-9][0-9]*)*$")) {
  System.out.println("カンマ区切りの数字です。");
} else {
  System.out.println("カンマ区切りの数字ではありません。");
}

4.11 String.replace

String replace(char oldChar, char newChar)

この文字列内にあるすべてのoldCharをnewCharに置換した文字列を戻り値として返す。もとの文字列自体が置き換えられるわけではない。

String replace(CharSequence target, CharSequence replacement)
target
置換されるchar値のシーケンス
replacement
char値の置換シーケンス

リテラルターゲットシーケンスに一致するこの文字列の部分文字列を、指定したリテラルシーケンスに置き換える。

置換後の文字列は戻り値として返る。元の文字列自体が置き換えられるわけではない。

Stringクラスのreplaceメソッドの使用例を示す。

class ReplaceExample {
  public static void main(String[] args) {
      String target = "abcab.abcab.ab";
      String replaced = target.replace("ab.", "xyz");
      System.out.println("置換前: " + target);
      System.out.println("置換後: " + replaced);
  }
}

上記プログラムの実行結果は次のとおり。

置換前: abcab.abcab.ab
置換後: abcxyzabcxyzab

4.12 String.replaceAll

指定した正規表現に一致する部分を、指定した文字列に置き換える。正規表現に一致する部分が複数ある場合は、すべて置き換える。

String replaceAll(String regex, String replacement)
regex
この文字列との一致を判定する正規表現
replacement
一致するものそれぞれに置き換えられる文字列

replaceAllメソッドは、結果として得られるStringを戻り値として返す。

正規表現の構文が無効な場合、replaceAllメソッドはjava.lang.regex.PatternSyntaxException例外を発生させる。

StringクラスのreplaceAllメソッドの使用例を示す。

class ReplaceAllExample {
  public static void main(String[] args) {
      String target = "abcab.abcab.ab";
      String replaced = target.replace("ab.", "xyz");
      System.out.println("置換前: " + target);
      System.out.println("置換後: " + replaced);
  }
}

上記プログラムの実行結果は次のとおり。

置換前: abcab.abcab.ab
置換後: xyzxyzxyzxyzab

4.13 String.split

String[] split(String regex)
String[] split(String regex, int limit)

Stringクラスの文字列を分割するには、splitメソッドを使用する。

public class Sample {
  public static void main(String[] args) {

      String str = "JAVA:SPLIT:STRING";

      String[] strArray = str.split(":");

      for (String str2 : strArray) {
          System.out.println(str2);
      }
  }
}

上記ソースプログラムの実行結果を示す。

JAVA
SPLIT
STRING

4.14 String.substring

String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
beginIndex
開始インデックス(0~、この値を含む)
endIndex
終了インデックス(この値を含まない)

4.15 String.trim

String trim()

先頭と最後の空白を取り除く

Stringクラスのtrimメソッドは、先頭と最後の空白を取り除いた文字列を返す。先頭と最後の空白は何文字あっても取り除かれる。先頭と最後以外の空白は取り除かれない。たとえば、" Hello world! ".trim()"Hello world!"を返す。

4.16 String.valueOf

static String valueOf(boolean b)
static String valueOf(int i)
static String valueOf(char c)
static String valueOf(long l)
static String valueOf(float f)
static String valueOf(double d)

引数の文字列表現を返す。

5 文字列から他のデータ型へ変換

5.1 Byte.parseByte

文字列(Stringクラス)からデータ型に変換するには、数値クラス(java.lang.Numberのサブクラス)のメソッドを使って変換します。 引数 s に指定された文字列オブジェクトを、該当するデータ型に変換して返します。 staticメソッドなので、数値クラスをインスタンス化(オブジェクトを作成)する必要はありません。

static byte Byte.parseByte(String s) throws NumberFormatException
static byte Byte.parseByte(String s, int radix) throws NumberFormatException
s
byte 型へ変換する文字列
radix
文字列オブジェクトが10進数表記でない場合、基数を指定してデータ型に変換します。 16進数表記の文字列の場合でも 0x といった接頭辞は不要です。0x があると、例外がスローされます。

5.2 Byte.valueOf

static byte Byte.valueOf(String s).byteValue()

5.3 Double.parseDouble

double static double Double.parseDouble(String s) throws NumberFormatException
double static double Double.parseDouble(String s, int radix) throws NumberFormatException

5.4 Double.valueOf

static double Double.valueOf(String s).doubleValue()

5.5 Float.parseFloat

static float Float.parseFloat(String s) throws NumberFormatException
static float Float.parseFloat(String s, int radix) throws NumberFormatException

5.6 Float.valueOf

static float Float.valueOf(String s).floatValue()

5.7 Integer.parseInt

static int Integer.parseInt(String s) throws NumberFormatException
static int Integer.parseInt(String s, int radix) throws NumberFormatException

文字列からデータ型に変換するサンプル・プログラム Convert.java を次に示します。

class Convert {
  public static void main(String args[]) {
    int i;
    i = Integer.parseInt("12");
    System.out.println(i);
    i = Integer.valueOf("12").intValue();
    System.out.println(i);
    i = Integer.parseInt("10", 8);
    System.out.println(i);
    i = Integer.parseInt("ff", 16);
    System.out.println(i);
  }
}

5.8 Integer.valueOf

static int Integer.valueOf(String s).intValue()

5.9 Long.parseLong

static long Long.parseLong(String s) throws NumberFormatException
static long Long.parseLong(String s, int radix) throws NumberFormatException

5.10 Long.valueOf

static long Long.valueOf(String s).longValue()

5.11 Short.parseShort

static short Short.parseShort(String s) throws NumberFormatException
static short Short.parseShort(String s, int radix) throws NumberFormatException

5.12 Short.valueOf

static short Short.valueOf(String s).shortValue()

6 他のデータ型から文字列へ変換

6.1 Byte.toString

static String Byte.toString(byte b)

6.2 Double.toString

static String Double.toString(double d)

6.3 Float.toString

static String Float.toString(float f)

6.4 Intger.toString

static String Intger.toString(int i)

データ型から文字列に変換するサンプル・プログラム Convert.java を次に示します。

class Convert {
  public static void main(String args[]) {
    String s = Integer.toString(255);
  }
}

6.5 Long.toString

static String Long.toString(long l)

6.6 Short.toString

static String Short.toString(short s)

StringBuilder

StringBuilder sb = new StringBuilder();
sb.append("foo");
sb.append("bar");
sb.append("baz");
System.out.println(sb.toString());

StringBuilderクラスのappendメソッドの戻り値は、自分自身への参照のため、メソッドチェーンを使用できる。

StringBuilder sb = new StringBuilder();
sb.append("foo").append("bar").append("baz");
System.out.println(sb.toString());

文字列に関するクラス

クラス 説明
java.lang.StringBuilder 変更できるスレッドセーフでない文字列
java.lang.StringBuilderのクラス図
Figure 3. java.lang.StringBuilderのクラス図

関連記事

java.lang.StringBuffer