Developer

【はじめてのJava】文字列【いろいろなクラス編】
2021.09.30
Lv1

【はじめてのJava】文字列【いろいろなクラス編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


目次


Stringクラスのメソッド

今記事ではjavaにおける文字列関係のクラスについて紹介します。
まず初めに、Stringクラスで使うことのできるメソッドについて紹介します。
以下の表には、Stringクラスの代表的なメソッドを記載しました。

メソッド名 説明
char charAt(int i) i番目の位置にある文字を返します。(先頭が0文字目なので注意。ほかのメソッドも同様。詳しくはsubString()メソッドの説明参照。)
int indexOf(String "ch") chが最初に出現するのは何文字目かを返します。
int length() 文字列の文字数を返します。
String substring(int i) i文字目から最後の文字までを文字列で返す。
String substring(int i, int j) i文字目からj文字目までを文字列を返す。
String toLowerCase() 大文字を小文字に変換した文字列を返す。
String toUpperCase() 小文字を大文字に変換した文字列を返す。
String toString() オブジェクトが保持する文字を返します。

substring()を使用する場合は、指定する整数の値に注意が必要です。
以下のサンプルコードについて見てみましょう。

public class Sample {
	public static void main(String[] args) {
		String str = "abcde";

		System.out.println("str.substring(2)  :" + str.substring(2));

		System.out.println("str.substring(1,3):" + str.substring(1,3));
	}

}

実行結果

 

「abcde」という文字列を代入したString型の変数strに対してsubstringメソッドを実行した結果です。
str.substring(2)を実行した場合、cdeという文字列が返されています。abcdeの3文字目から最後の文字までが返ってきています。
str.substring(1,3)を実行した場合、bcという文字列が返されています。abcdeという文字列の2文字目から3文字目までの文字列が返ってきています。
このように、引数に指定した数値と返ってくる文字列が直感的に把握しづらいので注意が必要です。
引数に指定した整数と返ってくる文字列の関係は以下の図のように覚えると良いでしょう。


文字列の結合

続いて、文字列結合について解説します。
プログラミングでは、文字列と文字列をつなげて一つの文字列に結合することが出来ます。
使い方はとても簡単で、書式は以下の通りです。

"文字列" + "文字列"

文字列結合を行う際は+記号を用いて記述します。算術演算子と同じ記号を用いるので注意しましょう。
ただし、文字列結合をする際に注意点があります。
例えば、

"文字列" + 整数などの数値

と記述した場合です。文字列と数値は結合されて一つの文字列になります。
例えば、以下のように記述すると、

String str = "abcde";
int i = 123;
System.out.println(str + i);

出力結果

abcde123

文字列である「"abcde"」と整数である「123」が文字列として結合され、「"abcde123"」という文字列が出力されます。
また、以下のように記述した場合、

String str = "abcde";
int i = 123;
int j = 456;
System.out.println(str + i + j); //文字列 + 整数 + 整数と記述した場合

出力結果

abcde123456

となります。123と456の和である579が出力結果に現れる、といったことはありません。
この時、まず初めに「str + i」の演算が実行され、「"abcde123"」という文字列に結合されます。そして、「"abcde123" + j」が文字列結合されて「"abcde123456"」という文字列が出力されます。
もし、iとjの和である579をstrと結合したいときには4行目の記述を

System.out.println(str + (i + j));

のように()でi+jを囲む必要があります。すると、先にi+jの演算が実行され、579という数値が計算されます。その後、「str + 579」が文字列結合されて「"abcde579"」という文字列を取得することが出来ます。
このように、文字列と数値が混在した状態で+演算子を使用する場合には、演算が実行される順番に気を付けなければ意図した文字列を取得することが出来ないので注意しましょう。


StringBuilderクラス

Stringクラス以外にも文字列を扱うクラスとしてStringBuliderクラスが存在します。
Stringクラスは参照型の為、String型の変数に対して代入を行うと上書きではなく参照先が変更されます。しかし、StringBuilderクラスを使用することで、文字列に対して文字列の追加や置き換えといった変更を行うことが可能になります。

メソッドの定義 説明
StringBuilder append(String str) 文字列strを現在の文字列の後ろに追加します。
StringBuilder insert(int offset, String str) 文字列strをoffset番目にある文字の前に挿入します。
StringBuilder reverse() 文字列の順番を逆さにします。abcならcbaになります。
void setCharAt(int index, char ch) index番目の文字をchに置き換えます。
StringBuilder delete(int start, int end) start番目からend番目までの位置にある文字をすべて削除します。end番目の文字は削除されません。
StringBuilder replace(int start, int end, String str) start番目からend番目の1つ前までの文字をstrに置き換えます。
String substring(int start, int end) start番目からend番目の1つ前までの文字列を返します。
String substring(int start) start番目から最後までの文字列を返します。

・append(String str)
appendメソッドは引数に受け取った文字列を現在の文字列の最後尾に追加します。

・insert(int offset, String str)
insertメソッドは、元の文字列に第2引数に受け取った文字列を挿入するメソッドです。
挿入する位置は第1引数に整数値で指定します。

・reverse()
reverseメソッドは、文字列の文字の順番を反対にして返すメソッドです。

・delete(int start, int end)
deleteメソッドは、第1引数から第2引数までの文字を削除するメソッドです。

・replace(int start, int end, String str)
replaceメソッドは、第1引数から第2引数までの文字を第3引数で指定した文字列で置き換えるメソッドです。


エスケープ文字

最後に、エスケープ文字について解説します。
エスケープ文字とは、改行やタブなどの特殊な文字をソースコード上で表現する際に使用する仕組みです。
例えば、ソースコード内で使用する文字列を途中で改行させたい場合について考えてみましょう。

System.out.println("はじめまして。
			こんにちは。");

のようにソースコード内で改行させたい文字列をただ改行させたとしても、コンパイルエラーとなってしまいます。
こういった時、プログラミングではエスケープ文字を使用して以下のように記述します。

System.out.println("はじめまして。\nこんにちは。");

すると出力結果は以下のようになります。

はじめまして。
こんにちは。

文字列が改行されて出力されてます。この時の文字列に記述されている「\n」の部分が改行を表現するためのエスケープ文字になります。
改行以外にも様々なエスケープ文字が存在するので、以下にまとめておきます。

エスケープ文字 説明
\b バックスペース
\t タブ文字
\n 改行
\r 復帰
\f フォームフィード
\' シングルクォーテーション
\" ダブルクォーテーション
\\ 円文字

※Windows環境下では、\は円マークになるので注意してください。

ポイント

StringBuilderクラスを使うことで、文字列に対して文字の追加・変更などを行うことが可能となる。
文字列の改行などは、エスケープ文字を使って行う。


はじめてのJavaシリーズの目次はこちら