文字列の判定や分割、連結などの方法がわからない…
文字列の検索や整形の方法がわからない…
Javaで文字列を扱うStringクラスは、単に文字列を扱うだけでなく、文字列に対してさまざまな操作をすることが可能です。
こんにちは!フリーランスのオータケです。StringクラスといえばJavaで頻繁に使うクラスの一つかと思います。
この記事では、Stringクラスの使い方について知りたい方のために、以下の内容について解説していきます。
- Stringとは
- 文字列が空、もしくはnullかどうか
- 文字列の分割・連結・切り出し・空白削除
- 文字列の検索
- 文字列の整形
- 文字コードとバイト配列
- 正規表現でマッチング、置換
- String型と関連するクラス
今回はStringクラスについて、書き方から7つの基本的な使い方までをわかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
JavaのStringクラスとは
Stringクラス
Stringとは、文字列を扱うためのクラスです。内部に文字列を保持し、それを操作するためのメソッドを提供します。データを保持しているだけの基本データ型(boolean,byte,char,short,int,long,float,double)とは違うことに気をつけてください。
「java.lang」パッケージの中にあるため、importすることなく使うことができます。
初期化と代入
文字列を扱うためには変数を用意(定義)しなければなりません。書き方は次のようになります。
String str;
これで文字列を入れることの出来る変数「str」を用意することができました。次に用意するのと同時に初期化をしてみましょう。
String str = "";
文字列を入れることの出来る変数「str」を用意し初期値として空文字(何もない文字列)を代入しています。この部分は任意の文字列を入れることができます。「hoge」という文字列を入れるには次のようにします。
String str = "hoge";
これで変数strには「hoge」という文字列が入りました。さきほど、Stringはクラスであることを解説しました。クラスからオブジェクトを作る時は、通常new演算子を使います。
しかし、Stringはnew演算子を使わず文字列を代入しているだけです。実は、コンパイラは””(ダブルクォーテーション)で囲われた文字列をオブジェクトとして処理しており、「String str = “hoge”;」と書くだけで、メモリ上にオブジェクトが作られているのです。そのため、
String str = new String("hoge");
のように、new演算子を使う必要はありません。
lengthで文字列の長さを取得する
文字列の長さを取得するには、lengthメソッドを使います。lengthメソッドは、以下のように使用します。
書き方:
String型変数.length()
lengthメソッドの使い方について詳しく解説していますので、次の記事を参考にして下さい。
文字列が等しいかどうか調べる
文字列の比較について、数値の比較は「==」で可能ですが、文字列は「==」で比較するべきではありません。文字列の比較にはequalsメソッドを使用します。equalsメソッドは、以下のように使用します。
書き方:
String型変数1.equals(String型変数2)
equalsメソッドを使う理由については次の記事にまとめてありますので、一読の価値アリです!
Stringクラスでよく使う7つの操作
文字列が空文字(“”)かnullかを調べる
ここでは文字列が何も入っていない状態か、nullかどうかの判定を行いたい場合に、どうすればよいかを解説していきます。
isEmptyで文字列が空か調べる
まず、空かどうかを知りたい場合はisEmptyメソッドを使うことで実現することができます。isEmptyメソッドは、以下のように使用します。
書き方:
String型変数.isEmpty()
ただ、このisEmptyには少し問題があり、その問題点と解決策について次の記事で解説しています。
文字列がnullかどうか調べる
次に文字列がnullかどうか知りたい場合ですが「==」演算子を使います。先程の解説で文字列の比較には「==」を用いるべきでないと書きました。
しかし、nullをチェックするためにはこの比較演算子を用います。「==」演算子は、以下のように使用します。
書き方:
if(String型変数 != null) { 処理 }
くわしい使い方と使用例について次の記事でわかりやすく解説しています。
また、Java8よりOptionalという機能が追加されています。この機能を使うと、nullチェックをこれまでより簡潔に書くことができます。Optionalについての詳しい解説は、こちらを参考にしてくださいね。
文字列の分割・連結・切り出し・空白削除
ここでは文字列の一部を加工したり、文字列同士を連結したり、といった文字列を「操作」するためのメソッドについて解説していきます。
splitで分割
文字列の中にある特定の文字列で分割し、データを配列で受け取りたい場合はsplitメソッドを使います。splitメソッドは、以下のように使用します。
書き方:
String型変数.split("区切り文字")
splitメソッドの使い方と使用例が次の記事で解説されています。わかりやすく解説されているので、ぜひご覧ください。
concat、joinで連結
今度は文字列を連結する方法についてみてみましょう。文字列を連結する方法はいくつかあります。まずは定番的なメソッドについて解説します。
concatメソッドを使えば簡単に文字列の連結を行うことが可能です。concatメソッドは、以下のように使用します。
書き方:
String型変数.concat(String str)
その使い方について解説した記事が次の記事です。さらにこの記事では、StringBuilderクラスのappendメソッドを用いた場合と、どちらの処理速度が早いのかを計測したデータも記載しています。処理速度が気になる方はぜひご覧ください。
次にJava8から追加されたStreamAPIのjoinメソッドを使う方法です。joinメソッドは、以下のように使用します。
書き方:
String.join("区切り文字", String型変数1, String型変数2, ・・・)
Javaプログラミング経験者の方でもまだ馴染みが無い方もいらっしゃるかもしれません。是非次の記事を読んで使い方を学んでおきましょう!
substringで範囲を切り出す
文字列の一部だけを切り出したい時には、substringメソッドを使うことでその結果を得ることができます。substringメソッドは、以下のように使用します。
書き方:
String.substring(int beginIndex, int endIndex)
このsubstringメソッドについて解説したものが次の記事です。基本的な使い方から少し応用的な使い方まで解説してあります。
trimで空白を削除
文字データを外部から読み込んで扱う際に文字列中に余分な空白が混ざってしまうことがあります。文字列中の余白(半角スペース)を削除するにはtrimメソッドを使います。trimメソッドは、以下のように使用します。
書き方:
String型変数.trim()
trimメソッドについて次の記事で詳しく解説しています。trimメソッドの使い方や特殊な文字について削除するような応用的な解説も書かれています。
文字列の検索
ここでは文字列の中に特定の値が含まれるかどうか、つまり文字列の検索を行うためのメソッドをご紹介します!
containsで有無の確認
containsメソッドは、指定の文字列が存在しているかいないかで「true / false」で結果を返します。containsメソッドは、以下のように使用します。
書き方:
String型変数.contains("指定文字列")
くわしくは次の記事で解説しています。
indexOfで位置の検索
次に同じ検索ですが、戻り値が違うindexOfメソッドについて紹介します。このメソッドは特定の値を見つけた場合に、どの位置で見つかったかを返してくれるメソッドになります。indexOfメソッドは、以下のように使用します。
書き方:
String型変数.indexOf("指定文字列")
詳しくは次の記事で解説しているので是非ご覧ください!
startsWith、endsWithで始まりと終わりを検索
文字列の前方一致(接頭辞)や、後方一致(接尾辞)の確認をするには、startsWithメソッド、endsWithメソッドを使います。startsWithメソッド、endsWithメソッドは次のように使用します。
書き方:
String型変数.startsWith("指定文字列") String型変数.endsWith("指定文字列")
詳しくは次の記事で解説しているので是非ご覧ください!
文字列の整形
formatで書式付き文字列を出力
文字列を扱っていく上で、カンマ区切りの数値や先頭から0で埋めた数値のように「書式付き文字列」といったものを扱う機会が出てくるかと思います。
この「書式付き文字列」を出力するにはformatメソッドを使用します。formatメソッドは、以下のように使用します。
書き方:
String.format("書式" , 値)
「書式付き文字列」について詳しく解説した記事が次の記事になります。この記事ではformatメソッドの使い方と書式付き文字列についてわかりやすく解説しています。
toUpperCase、toLowerCaseで大文字と小文字を変換する
文字列の大文字と小文字を変換するためのtoUpperCaseメソッドとtoLowerCaseメソッドを使います。これらのメソッドでは、指定した文字列のすべてを大文字にしたり、小文字にしたりすることができます。
書き方:
String型変数.toUpperCase() String型変数.toLowerCase()
詳しくは次の記事で解説しているので是非ご覧ください!
文字コードとバイト配列
ここでは文字列を操作する上で絶対に欠かすことのできない文字コードとバイトのお話について解説していきます。
文字コードの変換と判定
まず文字コードとは何かから、文字クラスとの関係性について次の記事で丁寧に解説しています。文字コードとはどんなものか全くわからない方や、何となくしか知らない方は一度みてみましょう!
getBytesでバイト配列に変換
次にgetBytesメソッドについて解説します。文字列は一言で表現すれば「バイト」という単位のデータの塊です。
文字列をバイトデータとして扱いたいときには、このgetBytesメソッドを使うことで、バイトデータに変換することができます。getBytesメソッドは、以下のように使用します。
書き方:
String型変数.getBytes()
どこでこのメソッドを使う必要性があるのかなどを、次の記事で解説していますのでぜひご覧ください。
正規表現でマッチング、置換
ここからは、より応用的な使い方を解説していきます。まずは「正規表現」についてです。正規表現は特定の条件に合致する文字列パターンのことです。正規表現に合致した文字列を抽出し、その合致した文字列に対して何らかの操作を行います。
matchesでパターンのマッチング
まずは条件の一致について知るためにmatchesメソッドについて学びましょう。matchesメソッドは、以下のように使用します。
書き方:
String型変数.matches("正規表現のパターン")
次の記事で丁寧にわかりやすく解説していますのでぜひご覧ください!
正規表現の書き方のサンプルパターンまとめ
正規表現は決められたパターンに沿った書き方をしますが、そのパターンを自分で考えるのは初心者には難しいかもしれません。次の記事では、よく使う正規表現の書き方のサンプル一覧もあるのでぜひご覧ください。
replaceとreplaceAllで置換
次に文字列の置換について解説をします。「置換」とは字のごとく文字列を置き換えることを意味します。置換するためのメソッドにはreplaceメソッドやいくつか種類があります。
replaceメソッドは、以下のように使用します。
書き方:
String型変数.replace(置換される文字列, 置換文字列)
次の記事ではreplaceメソッドやいくつかの種類について詳しく解説しています。
さらに次の記事では、replaceAllメソッドについて解説をしています。replaceAllメソッドは、以下のように使用します。
書き方:
String型変数.replaceAll("正規表現のパターン", 置換文字列)
この記事では、速度面等のデータもまとめてありますので、今後使っていく上で参考になるのではないでしょうか。
String型と他の型との型変換
ここでは文字列を別の型に変換する方法を解説していきます。
int型、double型との型変換
まずわかりやすい例として、よくある「文字列」⇔「数値」に変換する方法を次の記事で紹介しています。この記事では、変換に失敗した際についても解説していますので、エラーについて気になる方もぜひご覧ください。
Date型やその他の型との型変換
Date型などその他の様々な型へ変換する方法を示した記事が次の記事です。こちらもわかりやすく解説されていますので一読の価値アリです。
String型と関連するクラス
最後に文字列クラスはとても多くのメソッドが存在しておりいろいろな使い方ができます。それらを全て解説していくことはできませんが、押さえておいたほうがいい知識について、次の記事でそれぞれ解説をしていますので是非参考にして下さい。
まとめ
いかがでしたか?Stringクラスは頻繁に使うクラスであるため、Javaプログラマとして活躍する以上は、絶対に切っても切り離せない存在でもあります。
またStringクラスはとても奥が深いクラスでもあるので、もしStringクラスの使い方や関連したメソッドについて忘れてしまったら、是非この記事を思い出してくださいね。