java.lang.String は変更できない文字列(定数)を表すクラスです。インスタンスを作成した後に文字列の内容を変更することはできません。
Javaで文字列を表すクラスと、その違いを以下に示す。
クラス | 文字列の変更 | スレッド・セーフ |
---|---|---|
java.lang.String | ✗ | ✓ |
java.lang.StringBuffer | ✓ | ✓ |
java.lang.StringBuilder | ✓ | ✗ |
java.lang.Comparable<String>
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";
2つの文字列を辞書的に比較して、等しい場合は0、小さい場合は0より小さい値、大きい場合は0より大きい値を返す。
int compareTo(String 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'");
}
}
}
2つの文字列を辞書的に比較して(大文字と小文字は区別しない)、等しい場合は0、小さい場合は0より小さい値、大きい場合は0より大きい値を返す。
int compareToIgnoreCase(String 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'");
}
}
}
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("文字列が一致しません。");
}
}
}
指定した文字列と一致するかどうかを返す。比較の際には大文字と小文字を区別しない。
boolean equalsIgnoreCase(String s)
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);
}
}
int indexOf(int ch)
この文字列内で、指定された文字が最初に出現する位置のインデックスを返す。
int indexOf(String s)
この文字列内で、指定された部分が最初に出現する位置のインデックスを返す。
boolean isEmpty()
文字列の長さが0の場合はtrue、0以外の場合はfalseを返す。
String s = "foo";
if (s != null && !s.isEmpty())
{
// 文字列sを使った処理
}
指定した文字又は文字列が最後に出現する位置を返す。
int lastIndexOf(int ch)
int lastIndexOf(int ch, int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)
文字列の長さを文字数で返す。
int length()
class StringLengthExample {
public static void main(String[] args) {
String s = "文字列String";
System.out.println(s.length());
}
}
文字列が指定した正規表現に合致すればtrue、合致しなければfalseを戻り値として返す。
boolean matches(String regex)
文字列と比較する正規表現を指定する。
文字列が正規表現にマッチするかどうかを判定する例を示す。
String str = "1,12,300";
if (str.matches("^[1-9][0-9]*(,[1-9][0-9]*)*$")) {
System.out.println("カンマ区切りの数字です。");
} else {
System.out.println("カンマ区切りの数字ではありません。");
}
String replace(char oldChar, char newChar)
この文字列内にあるすべてのoldCharをnewCharに置換した文字列を戻り値として返す。もとの文字列自体が置き換えられるわけではない。
String replace(CharSequence target, CharSequence replacement)
リテラルターゲットシーケンスに一致するこの文字列の部分文字列を、指定したリテラルシーケンスに置き換える。
置換後の文字列は戻り値として返る。元の文字列自体が置き換えられるわけではない。
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
指定した正規表現に一致する部分を、指定した文字列に置き換える。正規表現に一致する部分が複数ある場合は、すべて置き換える。
String replaceAll(String regex, String 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
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
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
String trim()
先頭と最後の空白を取り除く
Stringクラスのtrimメソッドは、先頭と最後の空白を取り除いた文字列を返す。先頭と最後の空白は何文字あっても取り除かれる。先頭と最後以外の空白は取り除かれない。たとえば、" Hello world! ".trim()
は"Hello world!"
を返す。
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メソッドなので、数値クラスをインスタンス化(オブジェクトを作成)する必要はありません。
static byte Byte.parseByte(String s) throws NumberFormatException
static byte Byte.parseByte(String s, int radix) throws NumberFormatException
static byte Byte.valueOf(String s).byteValue()
double static double Double.parseDouble(String s) throws NumberFormatException
double static double Double.parseDouble(String s, int radix) throws NumberFormatException
static double Double.valueOf(String s).doubleValue()
static float Float.parseFloat(String s) throws NumberFormatException
static float Float.parseFloat(String s, int radix) throws NumberFormatException
static float Float.valueOf(String s).floatValue()
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);
}
}
static int Integer.valueOf(String s).intValue()
static long Long.parseLong(String s) throws NumberFormatException
static long Long.parseLong(String s, int radix) throws NumberFormatException
static long Long.valueOf(String s).longValue()
static short Short.parseShort(String s) throws NumberFormatException
static short Short.parseShort(String s, int radix) throws NumberFormatException
static short Short.valueOf(String s).shortValue()
static String Byte.toString(byte b)
static String Double.toString(double d)
static String Float.toString(float f)
static String Intger.toString(int i)
データ型から文字列に変換するサンプル・プログラム Convert.java を次に示します。
class Convert {
public static void main(String args[]) {
String s = Integer.toString(255);
}
}
static String Long.toString(long l)
static String Short.toString(short s)
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 | 変更できるスレッドセーフでない文字列 |