【Java入門】Stringの使い方まとめ

当ページのリンクには広告が含まれています。
目次

概要

Javaでもっともよく使う基本的なオブジェクト型はStringではないでしょうか。
Stringには便利なメソッドが多数用意されているので、それらをうまく使えるようになることはコーディングの上達に不可欠と言えます。
 

Stringの基本仕様

文字列を扱うクラス

言わずとも知れた文字列を扱うクラスです。
文字列を扱うための様々なメソッドが用意されています。

不変オブジェクト

Stringは不変オブジェクトです。
不変オブジェクトとは、インスタンス生成後に値の上書きが行われないオブジェクトのことです。

以下のようにStringを上書きするコードの場合、実際には新しいインスタンスが生成されています。

これを確認してみましょう。
方法として、別のString型の変数にコピーして、コピー先を変更してみます。
オブジェクト型はコピー先を修正すれば、コピー元も変更されるのが基本仕様ですが、不変オブジェクトであるStringはそうではありません。

以下では、コピー先であるcopiedはfirstの変更の影響を受けていません。

<出力結果>
first : changed first
copied : first

図解すると、以下のようになります。

これを知って何になるのかというと、Stringを大量に代入(文字列連結も含む)する処理はパフォーマンスに影響を与える可能性があるという認識を持てることです。

インスタンスの生成にはコストがかかるので、大量に連結する場合はStringBuilderクラスを使うことが推奨されています。
 

使い方別のメソッドまとめ

文字列の位置を取得

<indexOfメソッド>

<実行結果>
indexOf [a] -> 0
indexOf [ab] -> 0
indexOf [e] -> 4
indexOf [f] -> -1

<説明>
indexOfは、一致した文字列の最初のインデックス番号を返します。
上記の例だと、[ab]が一致した最初のインデックスは、[a]の手前である「0」が返ってきます。

文字列とインデックスの位置を図解すると、以下のようになります。

[f]のように、一致する文字列が無い場合は「-1」が返ってきます。
 

一字のみ(char)を取得

<charAtメソッド>

<実行結果>
charAt [0] -> a
charAt [4] -> e
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
(...出力情報は省略)

<説明>
インデックスを指定すると、charを返してくれます。
ただし、文字列のインデックスを超えて指定した場合は、「StringIndexOutOfBoundsException」がスローされます。
上記だと、インデックスの5は範囲外であると表示されています。
 

文字列の切り出し

<substringメソッド>

<実行結果>
substring [0] -> abcde
substring [1,4] -> bcd
substring [1,5] -> bcde
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
(...出力情報は省略)

<説明>
・引数が1つの場合
 指定したインデックス以降を切り取ります。
・引数が2つの場合
 1つ目がインデックス開始位置、2つ目がインデックス終了位置です。
 ただし、インデックス終了位置は含まれません。
 (仕様上は、指定した値から-1されています)
 そのため、[1,5]の指定で最後の[e]までを取得できます。([e]のインデックス番号は4)
・存在しないインデックスを指定した場合
 「StringIndexOutOfBoundsException」がスローされます。
 指定可能な範囲を1つ超えているので、「-1」が表示されています。
 

文字列の置換

<replaceメソッド>

<実行結果>
replace [a => A] -> Abcde
replace [a => AAA] -> AAAbcde
replace [f => F] -> abcde

<説明>
引数の1つ目に指定した文字列が存在する場合、
引数の2つ目に指定した文字列に置換します。

引数の1つ目には、char型またはString型が指定できます。
char型は、シングルクウォーテーション(‘)で囲みます。
String型は、ダブルクォーテーション(“)で囲みます。
 

文字数の取得

<lengthメソッド>

<実行結果>
length -> 5

<説明>
文字列数を返してくれます。
 

文字列の一致判定(前方一致)

<startsWithメソッド>

<実行結果>
startsWith [ab] -> true
startsWith [bc] -> false

<説明>
指定した文字列が、最初から全て一致しているかの判定結果を返します。
一字でも不一致の場合はfalseになります。
 

文字列の一致判定(後方一致)

<endsWithメソッド>

<実行結果>
endsWith [de] -> true
endsWith [cd] -> false

<説明>
指定した文字列が、最後まで全て一致しているかの判定結果を返します。
一字でも不一致の場合はfalseになります。

文字列の一致判定(部分一致)

<matches, containsメソッド>
下記の記事を参照
【Java】文字列の完全一致と部分一致を判定する方法
 

変換する(大文字)

<toUpperCaseメソッド>

<実行結果>
toUpperCase -> ABCDE

<説明>
文字列(英字)を全て大文字に変換します。
 

変換する(小文字)

<toLowerCaseメソッド>

<実行結果>
toLowerCase -> abcde

<説明>
文字列(英字)を全て小文字に変換します。
 

まとめ

  • Stringは文字列を扱うクラスである。
  • Stringは不変オブジェクトであるため、代入の際は常に新規のインスタンスが生成されている。
  • Stringには便利なメソッドが多数用意されている。

参考

最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

リーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰しました。
復帰前は開発未経験でしたが、独学した知識と面接時のコミュニケーション力で見事開発エンジニアとして復帰しました!
今はフリーランスエンジニアとして仕事をしています。

■保有資格
・Java Gold SE 11

コメント

コメントする

CAPTCHA


目次