Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaの正規表現を使って文字列から子音を削除する方法

Javaでは正規表現(Regex)を活用することで、文字列から特定の種類の文字だけを簡単に取り除くことができます。この記事では、正規表現を使って文字列から子音を削除し、母音や記号などだけを残す方法を、具体的なコード例とともに解説します。

正規表現における文字クラスと否定(^)の基本

正規表現のシンプルな文字クラス「[ ]」は、その中に指定されたすべての文字にマッチします。さらに、メタ文字である^(キャレット)を文字クラス内の先頭に置くと、否定(negation)として機能します。つまり、指定した文字以外のすべての文字にマッチすることになります。

例えば、次の正規表現は「b」以外のすべての文字(空白や特殊記号も含む)にマッチします。

"[^b]"

子音にマッチする正規表現パターン

同じ考え方を応用すると、母音・数字・記号・空白以外の文字、すなわち子音だけにマッチする正規表現を作成できます。それが次のパターンです。

"([^aeiouyAEIOUY0-9\\W]+)";

このパターンの意味を分解すると以下のようになります。

  • aeiouyAEIOUY:母音(大文字・小文字、およびy/Y)を除外
  • 0-9:数字を除外
  • \W:単語構成文字以外(空白や記号など)を除外

あとは、マッチした文字列を replaceAll() メソッドで空文字列「""」に置き換えることで、子音を削除できます。

例1:replaceAll() メソッドを使う方法

最もシンプルなのが、String クラスの replaceAll() を使う方法です。

public class RemovingConstants {
    public static void main( String args[] ) {
        String input = "Hi welc#ome to t$utori$alspoint";
        String regex = "([^aeiouAEIOU0-9\\W]+)";
        String result = input.replaceAll(regex, "");
        System.out.println("Result: "+result);
    }
}

実行結果

Result: i e#oe o $uoi$aoi

出力を見ると、子音がすべて削除され、母音・記号(# や $)・空白だけが残っていることが分かります。

例2:Pattern クラスと Matcher クラスを使う方法

より柔軟な制御が必要な場合は、java.util.regex.Patternjava.util.regex.Matcher を使う方法もあります。ユーザーからの入力を受け付けて処理する例を紹介します。

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RemovingConsonants {
    public static void main( String args[] ) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input string: ");
        String input = sc.nextLine();
        String regex = "([^aeiouyAEIOUY0-9\\W])";
        String constants = "";
        // パターンオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);
        // コンパイルしたパターンを文字列に適用
        Matcher matcher = pattern.matcher(input);
        // 空の StringBuffer を作成
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, "");
        }
        matcher.appendTail(sb);
        System.out.println("Result: \n"+ sb.toString() );
    }
}

実行結果

Enter input string:
# Hello how are you welcome to Tutorialspoint #
Result:
# eo o ae you eoe o uoiaoi #

まとめ

文字クラスと否定のメタ文字「^」を組み合わせることで、「母音以外の英字=子音」だけを抽出する正規表現を簡単に作成できます。手軽に処理したい場合は replaceAll()、マッチング処理を細かく制御したい場合は PatternMatcher クラスを使うとよいでしょう。状況に応じて使い分けることで、文字列操作の幅が大きく広がります。

  1. 【Java】replaceAll()メソッドと正規表現で文字列からHTMLタグを削除する方法

    JavaにおけるStringクラスはfinal修飾子が付いた不変(イミュータブル)なクラスです。これは、一度生成されたStringオブジェクト自体は変更できないことを意味しますが、変数が参照するオブジェクトを別のインスタンスに差し替えることは可能です。 文字列からHTMLタグを取り除くには、StringクラスのreplaceAll()メソッドを使用します。このメソッドに正規表現を指定することで、「<」と「>」で囲まれたタグ部分を空文字列に置き換えられます。処理後の文字列は、プレーンなテキストとして返されます。 replaceAll()メソッドの構文 public String re

  2. Javaの正規表現で文字列から数値を抽出する方法

    Javaの正規表現(Regular Expression)を使えば、文字列の中から数値だけを簡単に取り出すことができます。この記事では、実際のコード例とともに、さまざまなパターンでの数値抽出の方法を解説します。文字列を解析し、必要な情報を抜き出すスキルは、テスターにとって欠かせない能力の一つです。特にAPIテストでは、JSONやXML形式のレスポンスを解析する場面が多く、正規表現の知識が大いに役立ちます。以下では、Javaの正規表現を使って文字列から数字・数値を抽出する具体的な例を紹介します。文字列からすべての数値を抽出するimport java.util.regex.Matcher; imp