== String ==
文字列を扱うにはStringクラスを用います。
. 文字列は基本型(プリミティブ)ではない。
. charの配列ではない。(Cとは異なる)
. Stringは変更不能なオブジェクトです。
. 文字列はオブジェクトであるが、普通のオブジェクトとは次の点で振る舞いが異なります。
. 文字列に演算が行われたときは、そのオブジェクトが修正されるのではなく、新しくオブジェクトが作られます。
文字が並んだものを文字列という。
. プログラム中で文字列は '''"''' ではさんで "Hello World" のように記述する。
. この文字列の値は '''Hello World''' であって、'''"''' は含まれない。
. '''""''' は長さ0の文字列である。空文字列という。
以下に文字列の使い方の一部を示します。
他にも多くのメソッド(関数)があります。
----
=== 連結 ===
文字列の連結は演算記号 '''+''' を使って行うことが出来る。
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 には1つの引数しか書けないので、このような使い方をします。
{{{
System.out.println("k=" + k + ", x=" + x + ", p=" + p);
}}}
数値を文字列に変換するには、空文字列と連結すればよい。
xがdouble、sがStringのときの例を示す。
{{{
x = 3.14;
s = "" + x;
}}}
----
=== 文字列の比較 ===
2つの文字列が等しいかどうかを調べるには equals メソッドを使います。
2つのString型変数 a, b が、文字列として等しいかを判定する論理式は次のように書きます。
{{{
a.equals(b)
}}}
変数 a の値が文字列 "Hello" と等しいか比較する場合はこのように書きます。
{{{
a.equals("Hello")
}}}
----
=== 例 ===
文字列の連結と比較を行うプログラム
{{{#!java
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への代入では、対応する箱には文字列の値があるアドレスが代入されます。<
>
3つの代入文が実行された後の状態はこのようになります。
{{attachment:string2.png}}
10行目のif文では条件として b == c の論理式を用いています。
プリミティブの比較はこれで行いますが……
. == は変数の箱に入っている値を比較します。
. 変数bとcの箱には文字列のあるアドレスが入っています。
. 上の図の状態であると考えると、bとcの箱の中の値は異なるので not equal と表示されます。
14行目のif文では equalsメソッドを使って判定しているので、
文字列の値が比較され equal となります。
実行結果
{{attachment:string1.png}}
----
=== 文字列の長さ ===
文字列の長さを求めるには 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) のような形でつけて使います。
引数を2つとり、1番目は取り出す最初の位置、2番目は取り出す最後の文字の次の位置です。
{{{
s = "ABCDEFG";
System.out.println( s.substring(2,5) );
}}}
を行うと '''CDE''' と表示される。
----
=== 部分の文字 ===
文字列を構成する1文字を取り出すには 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 );
}}}