java.lang.Stringクラス

java.langパッケージは、Javaプログラム言語の基本的なクラスを提供する。java.langパッケージに限り、コンパイラによって暗黙的にimportされるため、明示的にimportする必要はない。

文字列に関するクラス

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

Stringクラスが実装しているインタフェース

CharSequence

コンストラクタ

コンストラクタ 説明
String() 空の文字列で初期化したStringオブジェクトを新たに生成する。
String(String original) 指定された文字列で初期化したStringオブジェクトを新たに生成する。
String(StringBuffer buffer) 指定された文字列で初期化したStringオブジェクトを新たに生成する。

メソッド

Stringクラスのメソッド
メソッド 説明
compareTo 2つの文字列を比較する。
compareToIgnoreCase 2つの文字列を比較する(大文字と小文字を区別しない)。
equals 引数で指定した文字列と比較し、一致するか否かを返す。
equalsIgnoreCase 引数で指定した文字列と比較し、一致するか否かを返す。比較の際は、大文字と小文字は区別しない。
getBytes 文字列をバイト配列に変換して返す。
indexOf この文字列内で、指定された文字又は文字列が最初に出現する位置のインデックスを返す。
isEmpty 文字列の長さが0か否かを返す
lastIndexOf 指定した文字又は文字列が最後に出現する位置を返す。
length 文字列の長さを文字数で返す。
matches 文字列が指定した正規表見と一致するか判定する。
replace 文字列を置き換える。
replaceAll 指定した正規表現に一致する部分を、指定した文字列で置き換える。
split 引数regexで指定した区切り文字で文字列を分割して、Stringの配列として返す。regexは正規表現で指定する。
substring この文字列の部分文字列である新しい文字列を返す。
trim 先頭と最後の空白を取り除いた文字列を返す。
valueOf 引数の文字列表現を返す。

.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'");
    }
  }
}

.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'");
    }
  }
}

.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("文字列が一致しません。");
      }
  }
}

equalsIgnoreCaseメソッド

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

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

getBytesメソッド

byte[] getBytes

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

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

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

indexOfメソッド

int indexOf(int ch)

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

int indexOf(String s)

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

isEmptyメソッド

boolean isEmpty()

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

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

lastIndexOfメソッド

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

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

length

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

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

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("カンマ区切りの数字ではありません。");
}

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

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

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

substringメソッド

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

trimメソッド

String trim()

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

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

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)

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

文字列からデータ型に変換する方法

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

データ型 メソッド
byte static byte Byte.parseByte(String s) throws NumberFormatException
short static short Short.parseShort(String s) throws NumberFormatException
int static int Integer.parseInt(String s) throws NumberFormatException
long static long Long.parseLong(String s) throws NumberFormatException
float static float Float.parseFloat(String s) throws NumberFormatException
double static double Double.parseDouble(String s) throws NumberFormatException

いったん数値クラスに変換してからデータ型に変換する方法もあります。

メソッド
static byte Byte.valueOf(String s).byteValue()
static short Short.valueOf(String s).shortValue()
static int Integer.valueOf(String s).intValue()
static long Long.valueOf(String s).longValue()
static float Float.valueOf(String s).floatValue()
static double Double.valueOf(String s).doubleValue()

文字列オブジェクトが10進数表記でない場合、基数を指定してデータ型に変換します。 16進数表記の文字列の場合でも 0x といった接頭辞は不要です。0x があると、例外がスローされます。

データ型 メソッド
byte static byte Byte.parseByte(String s, int radix) throws NumberFormatException
short static short Short.parseShort(String s, int radix) throws NumberFormatException
int static int Integer.parseInt(String s, int radix) throws NumberFormatException
long static long Long.parseLong(String s, int radix) throws NumberFormatException
float static float Float.parseFloat(String s, int radix) throws NumberFormatException
double static double Double.parseDouble(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);
  }
}

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

public byte[] getBytes()

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

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

データ型から文字列(Stringクラス)に変換する方法

データ型から文字列に変換する場合、valueOfメソッドを使用する。valueOfメソッドはstaticであるため、Stringクラスをインスタンス化する必要はない。

数値クラスのメソッドを使う方法もあります。

メソッド
static String Byte.toString(byte b)
static String Short.toString(short s)
static String Intger.toString(int i)
static String Long.toString(long l)
static String Float.toString(float f)
static String Double.toString(double d)

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

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

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());