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

Javaの正規表現ですべての空白と句読点で文字列を分割する方法

Javaでは、正規表現 [!._,'@?\s] を使うことで、文字列中のすべての句読点と空白文字に一致するパターンを作成できます。このパターンを split() メソッドに渡すと、記号やスペースをすべて区切り文字として扱い、文字列を単語ごとに分割できます。

正規表現パターンの内容

文字クラス [...] の中に列挙した文字のいずれか1つに一致します。このパターンの各要素は次のとおりです。

  • ! … 感嘆符
  • . … ピリオド
  • _ … アンダースコア
  • , … カンマ
  • ' … シングルクォート
  • @ … アットマーク
  • ? … 疑問符
  • \s … スペースやタブなどのすべての空白文字

例1:一致した個所をカウントする

まずは Pattern クラスと Matcher クラスを使って、入力文字列の中にパターンが何回一致するかを数えてみましょう。

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String args[]) {
        String input = "This is!a.sample\"text,with punctuation!marks";
        Pattern p = Pattern.compile("[!._,'@?\\s]");
        Matcher m = p.matcher(input);
        int count = 0;
        while(m.find()) {
            count++;
        }
        System.out.println("Number of matches: " + count);
    }
}

実行結果

Number of matches: 8

split()メソッドで文字列を分割する

String クラスの split() メソッドは、引数として正規表現を受け取り、そのパターンが一致した部分を区切りとして、現在の文字列をトークン(単語)の配列に分割します。

たとえば、区切り文字として半角スペース " " を渡して文字列を分割すると、2つのスペースに挟まれた部分が1つのトークンとみなされ、現在の文字列から単語の配列が返されます。

したがって、すべての空白と句読点の位置で文字列を分割したい場合は、上記の正規表現を引数に指定して split() メソッドを呼び出します。

例2:ユーザー入力を分割する

import java.util.Scanner;

public class RegExample {
    public static void main(String args[]) {
        String regex = "[!._,'@?\\s]";
        System.out.println("Enter a string: ");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        String[] tokens = input.split(regex);
        for(String token : tokens) {
            System.out.println(token);
        }
    }
}

実行結果

Enter a string:
This is!a.sample text,with punctuation!marks@and_spaces
This
is
a
sample
text
with
punctuation
marks
and
spaces

補足:StringTokenizerを使う方法

正規表現を必要としない単純な区切り文字の集合であれば、java.util.StringTokenizer クラスでも同じように分割できます。コンストラクタの第2引数には、区切り文字として扱いたい文字をすべて並べた文字列を渡します。

StringTokenizer str = new StringTokenizer(input, "!._,'@? ");
while(str.hasMoreTokens()) {
    System.out.println(str.nextToken());
}

ただし StringTokenizer は正規表現をサポートしないため、\s のようなパターン指定はできません。柔軟な文字列分割を行いたい場合は、split() メソッドの利用が推奨されます。

  1. 【Python入門】文字列内の空白スペースをすべてハイフンに置き換える方法

    文字列を受け取り、その中のすべての空白スペースをハイフン(-)に置き換えたい場合、Pythonのreplaceメソッドを使うのが最も簡単な方法です。 replaceメソッドは2つの引数を受け取ります。1つ目は置き換えの対象となる文字列(この場合は空白スペース)、2つ目は置き換え後の文字列(この場合はハイフン)です。このメソッドは、文字列内に存在する該当箇所をすべて一括で置き換えてくれます。 以下に、実際の動作を確認できるサンプルコードを示します。 サンプルコード my_string = input(Enter a string :) print(The string entered by us

  2. Pythonで文字列を分割・結合する方法|split()とjoin()の使い方を解説

    Pythonには、文字列の分割(split)と結合(join)を行うための組み込みメソッドが標準で用意されています。split()メソッドを使えば文字列を任意の区切り文字で簡単に分割でき、join()メソッドを使えば複数の文字列をひとつに連結できます。本記事では、それぞれの基本的な使い方をサンプルコードとともに解説します。 split Str.split() join Str1.join(str2) アルゴリズム ステップ1:文字列を入力する。 ステップ2:分割にはsplitメソッドを、結合にはjoin関数を使用する。 ステップ3:結果を出力する。 各メソッドのポイント split()