こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

StringのreplaceとreplaceAll

こんにちは。「Javaを復習する初心者」です。今回はStringクラスのrepreplace()メソッドとreplaceAll()メソッドについて、使い方を確認しました。

2つのメソッドの相違点

replace()メソッドとreplaceAll()メソッドはともに文字列の置換をするメソッドです。違いは正規表現を使うかどうかです。replace()メソッドはいくつかオーバーロードされたメソッドが用意されますが、文字列を文字列で置換する機能です。それに対して、replaceAllは正規表現を使って、文字列の置換を実行します。

replace()は以下の2つのメソッドが用意されます

  • replace(char oldChar, char newChar)
  • replace(CharSequence target, CharSequence replacement)

使い方は[String型のインスタンス].replece(‘a’, ‘b’)のような使い方です。勘違いしやすい点として、元のインスタンスの文字列自体は変化しません。常に新しいString型のインスタンスが返却されます。

使用例

具体的にメソッドを使ってみましょう。前回つかった著作権フリーの英文から適当に文字列を選びました。”Without farther enumerating or explaining the prizes”という部分を使ってみます。この部分を選んだ意味は特にありません。この文字がString型変数strに格納されているとします。以下は「a」を「A」に変えるという動作をします。引数ではcharを指定するため、シングルクォーテーションで囲んでます。

        System.out.println(str.replace('a', 'A'));

「Without fArther enumerAting or explAining the prizes」と出力されました。何回か「a」という文字が登場してますが、すべて「A」に置き換わってます。

以下は「in」を「IN」に変えるという動作をします。引数はCharSequenceインターフェースですが、Stringはこのインターフェースを実装しているので、引数に指定できます。

        System.out.println(str.replace("in", "IN"));

「Without farther enumeratINg or explaININg the prizes」と出力されました。

今度はreplaceAllを使ってみましょう。String型変数に”This is a pen. That is a pen.”が格納されているとします。この文章は自作です。この文章で動詞「is」を「is not」に変えるということを考えます。次のようにreplece()メソッドを使うと期待通りの結果にはなりません。

        System.out.println(str.replace("is", "is not"));

「This」の「is」が変換されてしました。単語を考慮しなかったからです。第一引数を” is “にしても良いのですが、今回はreplaceAllで正規表現を使ってみます。あまり工夫する箇所はないのですが、以下のように空白を正規表現を使って表してみました。

        System.out.println(str.replaceAll("\\sis\\s", " is not "));

結果は「This is not a pen. That is not a pen.」となり期待通りの結果になりました。注意する箇所はisの前後の空白も置き換わる点です。そのため、「is not」の前後に空白をいれています。