プログラミング

【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には便利なメソッドが多数用意されている。

参考

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

エンジニア未経験者の転職が難しくなったので解決策を提案してみる

現状 コロナ以降、未経験者のエンジニア採用が少しずつなくなっていきました。 それまではポートフォリオを作ったり、ある程度のポテンシャルがあると判断されれば 採用されるということがあったのですが、それが …

no image

【PHP】配列と連想配列と多次元配列の説明と使用例

配列とは? 1つの変数に複数の値を持つものです。 整数型や文字列型は1つの変数に1つの値を持ちますが、配列は同じようなデータの集まりを1つの変数に持つことができるようになっています。 配列には通常の添 …

junit, テスト, junit5

【JUnit5】基本的なAssertionまとめ

概要 JUnit5における基本的なAssertionをまとめました。 検証方法 等価性 値が等価であるかを検証するメソッドです。 以下はorg.junit.jupiter.api.Assertions …

junit, テスト, junit5

【Junit5】表示名のカスタマイズ(@DisplayName)

概要 Junit5で表示名をカスタマイズする方法です。 Junit4については以下を参考にしてください。  ↓ https://irof.hateblo.jp/entry/20130124/p1 でき …

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

概要 Consumer<T>は消費者と呼ばれる関数型インターフェースで、acceptメソッドを持ちます。 消費者というだけあって戻り値がありません。 また、引数はT型を1つとります、   …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。