1. Top
  2. Java SE
  3. 文字列

文字列

Character

Javaでは文字データを扱うクラスとしてCharacter、String、StringBufferの3つのクラスが用意されています。
Characterクラスのオブジェクトは'A'、'z'など単一文字の値を保持し、一度文字が代入されると変更することはできないという性質を持ちます。基本型変数charとの違いは、Characterオブジェクトには大文字小文字を判別するメソッド、オブジェクト同士を比較するメソッドなど便利なメソッドが用意されていると言う点です。

コンストラクタ

Characterクラスのコンストラクタは一つだけです。
コンストラクタ
説明
Character(char)
Characterクラス唯一のコンストラクタです。引数で与えられたchar値を表す値をオブジェクトの中に保持します。


//char値Aが保持されたオブジェクトaaaの作成
Character aaa = new Character('A');


インスタンスメソッド

以下はCharacterクラスに用意されている主なインスタンスメソッドです。
インスタンスメソッドとは『オブジェクト.メソッド』の形式で実行される、ある特定のインスタンスに対して使用されるメソッドです。
戻り型
メソッド
説明
int
compareTo(Character)
メソッドを呼び出した対象のオブジェクトと引数のオブジェクトが保持する値の比較を行います。値が等しい場合は0を返します。メソッド呼び出しオブジェクトの方が大きな値を保持している場合は正の整数を返します。引数に与えられたオブジェクトの方が小さな値を保持している場合は負の整数を返します。
boolean
equals(Object)
メソッドを呼び出した対象のオブジェクトと引数のオブジェクトの比較を行います。両オブジェクトの値が等しい場合にtrueを返します。
String
toString( )
Characterオブジェクトを文字列に変換するメソッドです。引数のオブジェクトは長さ1のオブジェクトの値を保持した文字列に変換されます。
char
charValue( )
Characterオブジェクトが保持する値をchar型に変換して返します。

public static void main(String[] args) {
    Character X1 = new Character('A');
    Character X2 = new Character('B');

    if (X1.equals(X2)) {
        System.out.println("X1とX2は同じ値です。");
    } else {
        System.out.println("X1とX2は異なる値です。");
    }
}


クラスメソッド

以下はCharacterクラスに用意されている主なクラスメソッドです。クラスメソッドとはオブジェクトの生成をしなくても『クラス.メソッド』の形式で実行できるメソッドのことを言います。
戻り型
クラスメソッド
説明
static boolean
static boolean
isUpperCase(char)
isLowerCase(char)
引数のchar型の値が大文字(isUpperCase)か小文字(isLowerCase)かを判断します。値が正しければtrue、そうでなければfalseを返します。
static char
static char
toUpperCase(char)
toLowerCase(char)
引数のchar型の値を大文字(toUpperCase)ないしは小文字(toLowerCase)にして返します。返り値はchar型になります。
static boolean
static boolean
static boolean
isLetter(char)
isDigit(char)
isLetterOrDigit(char)
引数のchar型の値が英字(isLetter)か数字(isDigit)か英字もしくは数字(isLetterOrDigit)かを判断します。値が正しければtrue、そうでなければfalseを返します。
static boolean
isWhitespace(char)
引数のchar型の値がJavaプラットフォームの仕様に従ったスペース文字かどうかを判断します。値が正しければtrueをそうでなければfalseを返します。
static boolean
isSpaceChar(char)
引数のchar型の値がUnicodeの仕様に従ったスペース文字かどうかを判断します。値が正しければtrueをそうでなければfalseを返します。

public static void main(String[] args) {
    char X = 'a';
    if(Character.isUpperCase(X)) {  //変数Xの値が大文字か判断
        System.out.println("Xは大文字のAです。");
    } else {
        System.out.println("Xは小文字のaです。");
    }
}


ページの先頭へ

String

Characterクラスが単一文字しか扱えなかったのに対しStringクラスは複数文字(文字列)を扱うことができます。
Stringオブジェクトを生成する主な手段として以下の2つの方法があります。
String オブジェクト名 = "文字列";
String オブジェクト名 = new String("文字列");

コンストラクタ

Stringクラスで用意されているコンストラクタの内、いくつかを紹介します。状況に応じコンストラクタの使い分けを行います。
コンストラクタ
説明
String( )
空のオブジェクトを生成します。
String(byte[ ])
String(byte[ ], int, int)
String(byte[ ], int, int, String)
String(byte[ ], String)
バイト配列から生成される文字列をオブジェクトに代入します。int型の値(存在する場合)はバイト配列におけるオフセットと長さを表します。String型の値(存在する場合)はバイトを文字列に変換する際に使用する文字エンコーディング方法を指定します。
String(char[ ])
String(char[ ], int, int)
char型配列から生成される文字列をオブジェクトに代入します。int型の値(存在する場合)はchar型配列におけるオフセットと長さを表します。
String(String)
別のString型オブジェクトの値を代入して、新規String型オブジェクトを生成します。
String(StringBuffer)
StringBuffer型オブジェクトの値を代入して、新規String型オブジェクトを生成します。

【例】char型配列からStringオブジェクトを生成する方法です。
public static void main(String[] args) {
    char[] ccc = {'a', 'b', 'c', 'd', 'e'};
    //char型配列のうちbcdをを文字列として
    //Stringオブジェクトaaaに代入
    String aaa = new String(ccc, 1, 3);
    System.out.println("Stringオブジェクトaaaは" + aaa + "です。");
}


メソッド

戻り型
メソッド
説明
int
length( )
オブジェクトの保有する文字数を返します。
char
charAt(int)
指定されたインデックス番号の位置にある文字を返します。
String
String
substring(int)
substring(int, int)
指定されたインデックス番号の位置から終端までの文字列を返します。第2引数が指定されている場合は、第1引数から第2引数までの文字列を返します。
int
int
indexOf(String)
lastIndexOf(String)
indexOfでは指定された文字列の最初の出現のインデックス番号を返します。lastIndexOfでは指定された文字列の最後の出現のインデックス番号を返します。
boolean
boolean
boolean
endsWith(String)
startsWith(String)
startsWith(String, int)
呼び出したStringオブジェクトの文字列が引数で指定した文字列で終わって(始まって)いればtrueをかえします。第2引数がある場合は、それはStringオブジェクトの文字列の探索を開始する開始点(オフセット)を意味します。
int
int
compareTo(String)
compareTo(Object)
呼び出すStringオブジェクトの文字列と引数の値を比較し、等しい場合は0を、Stringオブジェクトの方が大きい場合は正の整数を、小さい場合は負の整数を返します。引数がオブジェクト型の場合はString型に変換され、比較されます。
boolean
equals(Object)
呼び出すStringオブジェクトと引数の値を比較し、等しい場合はtrueを返します。
String
concat(String)
呼び出すStringオブジェクトの末尾に引数の文字列を付け加えます。
String
replace(char, char)
第1引数で指定された文字を、第2引数で指定された文字に置き換えます。
String
trim( )
呼び出すStringオブジェクトの両端の空白文字を削除します。
String
String
toLowerCase( )
toUpperCase( )
呼び出すStringオブジェクトを小文字(大文字)に変換します。




ページの先頭へ

StringBuffer

StringBufferクラスクラスは可変の文字列を扱うことが出来ます。文字列の操作というとStringクラスを思い出すかと思いますが、大きな違いは Stringクラスが固定の文字列を扱うクラスであったのに対し、StringBufferクラスはメソッドによって、長さと内容を変更することが出来ます。

Stringクラスは前述したように文字列を定数として扱います。そのため、+ 演算子による連結では内部的にこの StringBufferを呼び出しています。 そのような事から、連結等を頻繁に行うような場合は StringBufferを使用するようにします。

とりあえず、サンプルから見てみます。
public static void main(String []args) {
    StringBuffer sb = new StringBuffer("Hello World! こんにちは、");
    sb.append("Java!");
    System.out.println(sb.toString());
}

コンストラクタ

コンストラクタ
説明
StringBuffer( )
メモリ割り当て領域が16文字である空の文字列バッファを生成します。
StringBuffer(int)
指定された文字数のメモリ割り当て領域を持つ空の文字列バッファを生成します。
StringBuffer(String)
指定されたStringで初期化された文字列バッファを生成します。メモリ割り当て領域は指定されたStringの長さに16文字を加えた領域になります。



メソッド

戻り型
メソッド
説明
int
length( )
オブジェクトの保有する文字数を返します。
int
capacity( )
オブジェクトの保有する文字列バッファ数(メモリ割り当て領域)を返します。
char
charAt(int)
指定されたインデックス番号の位置にある文字を返します。
String
String
substring(int)
substring(int, int)
指定されたインデックス番号の位置から終端までの文字列を返します。第2引数が指定されている場合は、第1引数から第2引数までの文字列を返します。
StringBuffer
append(boolean)
append(char)
append(char[ ])
append(char[ ], int, int)
append(double)
append(float)
append(int)
append(long)
append(Object)
append(String)
呼び出すStringBufferオブジェクトの末尾に引数で指定されたデータを追加します。データは文字列に変換されてから追加されます。char型配列の第2引数は配列のオフセットを第3引数はオフセットからの長さを表します。
StringBuffer
delete(int, int)
呼び出すStringBufferオブジェクトの文字列を引数で指定された範囲で削除します。
StringBuffer
insert(int, boolean)
insert(int, char)
insert(int, char[ ])
insert(int, char[ ], int, int)
insert(int, double)
insert(int, float)
insert(int, int)
insert(int, long)
insert(int, Object)
insert(int, String)
呼び出すStringBufferオブジェクトの文字列に第2引数で指定されたデータを挿入します。第1引数で挿入位置を指定します。指定されたインデックス番号の前にデータが挿入されます。先頭に文字を挿入したい場合は0を指定します。データは挿入される際文字列に変換されてから挿入されます。 char型配列の第3引数は配列のオフセットを第4引数はオフセットからの長さを表します。
StringBuffer
replace(int, int, String)
呼び出すStringBufferオブジェクトの文字列を引数で指定された範囲で文字列に置き換えます。
void
setLength(int)
オブジェクトの文字列バッファ数(メモリ割り当て領域)を設定します。
StringBuffer
reverse( )
呼び出すStringBufferオブジェクトの文字列の順序を逆にします。

【例】文字列の連結
// 文字列の連結
StringBuffer sb = new StringBuffer("Hello ");   
sb.append("Java!"); //Hello Java!   
sb.append(true);    //Hello Java!true   
sb.append(100);     ////Hello Java!true100

// 文字列バッファの長さ
System.out.println(sb.length());

// 文字列の置換
sb.replace(0, 5, "xxx");
System.out.println(sb.toString());  //xxx Java!true100

// 文字列バッファに挿入
sb.insert(3, "zz");   
System.out.println(sb.toString());  //xxxzz Java!true100

// 文字列バッファに削除
sb.delete(3, 5);   
System.out.println(sb.toString());  //xxx Java!true100

// サブ文字列の取得
String str = sb.substring(1, 7);   
System.out.println(str);    //xx Ja 



ページの先頭へ

文字列の分割

splitメソッドはStringクラスのメソッドで、文字列を分割するために使用します。分割する区切り文字は正規表現で指定できます。正規表現を使用することにより、単純な区切り文字から、複雑な区切り文字まで柔軟に指定できるようになります。正規表現の詳細は、java.util.regexパッケージのJava APIドキュメントをご参照ください。
戻り型
メソッド
説明
String[]
split(String)
文字列を引数に指定した正規表現に従い、分割します。分割された文字列はStringの配列として返されます。
String[]
split(String, int)
文字列を第1引数に指定した正規表現に従い、分割します。第2引数には正規表現の適用回数を指定します。指定した回数を過ぎると、残りの文字列は配列の最後に代入されます。

【例】
//文字列"java Java JAVA"をスペースで分割し、配列str1Aryに代入します。
String str1 = new String("java Java JAVA");
String[] str1Ary = str1.split(" ");


//文字列"java Java JAVA"を.で分割し、配列str2Aryに代入します。
//.は正規表現では任意の文字という特殊な意味を持ちます。
//そのため、\でエスケープする必要があります。
String str2 = new String("java.Java.JAVA");
String[] str2Ary = str2.split("\\.");

ページの先頭へ