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() メソッドの利用が推奨されます。
-
【Python入門】文字列内の空白スペースをすべてハイフンに置き換える方法
文字列を受け取り、その中のすべての空白スペースをハイフン(-)に置き換えたい場合、Pythonのreplaceメソッドを使うのが最も簡単な方法です。 replaceメソッドは2つの引数を受け取ります。1つ目は置き換えの対象となる文字列(この場合は空白スペース)、2つ目は置き換え後の文字列(この場合はハイフン)です。このメソッドは、文字列内に存在する該当箇所をすべて一括で置き換えてくれます。 以下に、実際の動作を確認できるサンプルコードを示します。 サンプルコード my_string = input(Enter a string :) print(The string entered by us
-
Pythonで文字列を分割・結合する方法|split()とjoin()の使い方を解説
Pythonには、文字列の分割(split)と結合(join)を行うための組み込みメソッドが標準で用意されています。split()メソッドを使えば文字列を任意の区切り文字で簡単に分割でき、join()メソッドを使えば複数の文字列をひとつに連結できます。本記事では、それぞれの基本的な使い方をサンプルコードとともに解説します。 split Str.split() join Str1.join(str2) アルゴリズム ステップ1:文字列を入力する。 ステップ2:分割にはsplitメソッドを、結合にはjoin関数を使用する。 ステップ3:結果を出力する。 各メソッドのポイント split()