String

文字列を扱うにはStringクラスを用います。

文字列は基本型(プリミティブ)ではない。

charの配列ではない。(Cとは異なる)

Stringは変更不能なオブジェクトです。

文字列はオブジェクトであるが、普通のオブジェクトとは次の点で振る舞いが異なります。

文字列に演算が行われたときは、そのオブジェクトが修正されるのではなく、新しくオブジェクトが作られます。

文字が並んだものを文字列という。

プログラム中で文字列は " ではさんで "Hello World" のように記述する。

この文字列の値は Hello World であって、" は含まれない。

"" は長さ０の文字列である。空文字列という。

以下に文字列の使い方の一部を示します。 他にも多くのメソッド（関数）があります。

連結

文字列の連結は演算記号 + を使って行うことが出来る。

a,b,cをStringクラスの変数とし

a = "Hello"; b = "World"; c = a + b;

を行うと、c の値は Hello World になる。

基本型(プリミティブ)を文字列に連結すると、値に対応する文字列に変換してから連結される。

kがint型、xがdouble型、pがboolean型、sがStringクラスの変数のとき

k = 103; x = 5.789; p = true; s = "kotae" + k + x + p;

を行うと、s は kotae1035.789true になる。

この機能は結果を表示するのにしばしば利用されます。 System.out.println には１つの引数しか書けないので、このような使い方をします。

System.out.println("k=" + k + ", x=" + x + ", p=" + p);

数値を文字列に変換するには、空文字列と連結すればよい。 xがdouble、sがStringのときの例を示す。

x = 3.14;s = "" + x;

文字列の比較

２つの文字列が等しいかどうかを調べるには equals メソッドを使います。

２つのString型変数 a, b が、文字列として等しいかを判定する論理式は次のように書きます。

a.equals(b)

変数 a の値が文字列 "Hello" と等しいか比較する場合はこのように書きます。

a.equals("Hello")

例

文字列の連結と比較を行うプログラム

public class MojiHikaku {
public static void main ( String[] args) {
String a, b, c;
a = "Hello";
b = a + "World";
c = "HelloWorld";
System. out. println( a );
System. out. println( b );
System. out. println( c );
if( b == c )
System. out. println( "equal" );
else
System. out. println( "not equal" );
if( b. equals( c) )
System. out. println( "equal" );
else
System. out. println( "not equal" );
}
}

Stringはプリミティブ(基本型)ではないので、値は変数とは別の場所にとられます。
変数a,b,cへの代入では、対応する箱には文字列の値があるアドレスが代入されます。
３つの代入文が実行された後の状態はこのようになります。

10行目のif文では条件として b == c の論理式を用いています。 プリミティブの比較はこれで行いますが……

== は変数の箱に入っている値を比較します。

変数bとcの箱には文字列のあるアドレスが入っています。

上の図の状態であると考えると、bとcの箱の中の値は異なるので not equal と表示されます。

14行目のif文では equalsメソッドを使って判定しているので、 文字列の値が比較され equal となります。

実行結果

文字列の長さ

文字列の長さを求めるには length メソッドを使います。

書き方

文字列.length()

例1

s = "Hello";System.out.println( s.length() );

変数sに代入された文字列"Hello"の長さを求めそれを表示します。 5と表示されます。

例2

i = "HelloWorld".length();

文字列に対して直接lengthを行うこともできます。 iには10が代入されます。

例3

s = "日本語の文字列";i = s.length();

漢字などでも文字数を正しく求められます。 iの値は7になります。

部分文字列

文字列からその一部分を取り出すには substring メソッドを使います。

substringメソッドも文字列の後ろに .substring(0,3) のような形でつけて使います。 引数を２つとり、１番目は取り出す最初の位置、２番目は取り出す最後の文字の次の位置です。

s = "ABCDEFG"; System.out.println( s.substring(2,5) );

を行うと CDE と表示される。

部分の文字

文字列を構成する１文字を取り出すには indexOf メソッドを使います。

String s; char c; s = "ABCDEFG"; c = s.indexOf(3);

とすると、cには文字Dが入ります。

数値への変換

文字列 s をintに変換しint型の変数 i に代入するにはこのように書きます。

s = "1230";i = Integer.parseInt( s );

文字列 s をdoubleに変換しdouble型の変数 d に代入するにはこのように書きます。

s = "2.17";d = Double.parseDouble( s );