Javaで文字列を美しく切り出す!正規表現をマスターしよう!
Javaで文字列の操作を行う際、正規表現は非常に強力なツールとなります。
この記事では、「java 文字列 切り出し 正規表現」というキーワードで検索してくださったあなたに、Javaと正規表現を用いた文字列の切り出し方を詳細に解説します。
1. 基本的な文字列の切り出し方
まずは基本から。JavaではString
クラスのsubstring()
メソッドを使用することで、文字列を切り出すことができます。
この方法は正規表現を使用しない非常にシンプルなものです。
ソースコード例
1 2 3 4 5 6 7 |
public class Program { public static void main(String[] args) { String str = "Hello, World!"; String subStr = str.substring(7, 12); System.out.println(subStr); } } |
出力結果
World
上記のコードでは、7文字目から12文字目までの文字列("World")を切り出しています。
非常にシンプルでわかりやすいメソッドですね。
KindleUnlimited会員であれば、全ての本をご覧頂けます。 StreamAPIを理解すれば、Javaの世界が変わる 第1版
2. 正規表現を使用した基本的な切り出し方
次に、正規表現を用いて文字列を切り出す基本的な方法を見ていきましょう。
正規表現を使用すると、パターンを定義してそのパターンに一致する文字列を取得することができます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Program { public static void main(String[] args) { String str = "I have 2 apples and 3 oranges."; Pattern pattern = Pattern.compile("\\d+"); Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(matcher.group()); } } } |
出力結果
2
3
上記のコードでは、文字列から数字("2"と"3")を正規表現を使用して切り出しています。
"\\d+"というパターンは、1つ以上の数字に一致します。
正規表現において、"\\d+"というパターンは、実際には文字列に"1つ以上の数字(0-9)"を意味します。たとえば、"23"、"345"、"45678"などが該当します。
実は、Java文字列リテラル内でバックスラッシュ"\"はエスケープ文字として扱われるため、正規表現の"\d"を文字列として表現するには"\d"と書く必要があります。
つまり、Javaの文字列では、バックスラッシュ自体をエスケープ(二重にする)する必要があります。したがって、正規表現の"\d"をJava文字列で表現すると"\\d"になります。
同様に、他の正規表現もJavaで使用する際は注意が必要です。例えば、"\w"(任意の単語文字にマッチ)は"\\w"と書く必要があります。
3.正規表現とエスケープシーケンス
Javaの正規表現では、特定の文字をリテラルとして扱う場合や、特定の文字クラスを表す場合にバックスラッシュを使用します。しかしながら、Java文字列内でバックスラッシュを使用する場合、それ自体をエスケープしなければならないので、結果としてバックスラッシュを2つ書くことになります。
正解です。長い正規表現や複雑なパターンを扱う際には、その正確さと読みやすさを保つことが重要です。そのためにも、正規表現のパターンはコメントやドキュメントで適切に説明して、後からコードを見た際に理解しやすくすると良いでしょう。
4. Javaと正規表現の基本
Javaには文字列を扱う強力なライブラリが数多く存在しています。
特に、正規表現を用いて文字列を検索、置換、切り出しする場面では、Pattern
クラスとMatcher
クラスが中心となります。これらのクラスを使用することで、簡単に複雑な文字列操作を行うことが可能になります。
正規表現の基本ルール
正規表現は、特定のパターンを持つ文字列を検索・置換・分割するための言語です。
例えば、.
(ドット)は任意の1文字を、*
は0回以上の繰り返しを意味します。これらを組み合わせることで、様々なパターンを表現できます。
5. Javaでの正規表現の基本的な使い方
Javaで正規表現を使う際には、主にPattern
クラスとMatcher
クラスを使用します。
まずは、これらのクラスを使って基本的な文字列の検索を行う方法を見ていきましょう。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.util.regex.Pattern; import java.util.regex.Matcher; public class Program { public static void main(String[] args) { String text = "I love Java programming!"; Pattern pattern = Pattern.compile("Java"); Matcher matcher = pattern.matcher(text); if(matcher.find()) { System.out.println("Match found!"); } else { System.out.println("Match not found."); } } } |
出力結果
Match found!
6. 文字列の切り出し
次に、文字列から特定のパターンにマッチする部分を切り出す方法を見ていきます。
この場合もPattern
とMatcher
を使います。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.util.regex.Pattern; import java.util.regex.Matcher; public class Program { public static void main(String[] args) { String text = "The price is $100 and $200 for VIP"; Pattern pattern = Pattern.compile("\\$(\\d+)"); Matcher matcher = pattern.matcher(text); while(matcher.find()) { System.out.println("Found value: " + matcher.group(0)); } } } |
出力結果
Found value: $100 Found value: $200
7. より複雑なパターンの切り出し
さらに複雑なパターンの文字列を切り出す場合も考えてみましょう。
例えば、電話番号のような特定の形式を持つ文字列を検索する場合などです。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.util.regex.Pattern; import java.util.regex.Matcher; public class Program { public static void main(String[] args) { String text = "Contact us at 123-456-7890 or 987-654-3210"; Pattern pattern = Pattern.compile("(\\d{3}-\\d{3}-\\d{4})"); Matcher matcher = pattern.matcher(text); while(matcher.find()) { System.out.println("Found number: " + matcher.group(1)); } } } |
出力結果
Found number: 123-456-7890 Found number: 987-654-3210
まとめ
Javaの正規表現を使用することで、文字列の検索・置換・切り出しを行うことができます。初めは難しそうに感じるかもしれませんが、基本を押さえて練習を重ねることで、慣れていくことができるでしょう。