【Java】文字列から非ASCII文字を削除する方法をわかりやすく解説
Posix文字クラス「\p{ASCII}」とは
Javaの正規表現で利用できるPosix文字クラス \p{ASCII} は、ASCII文字に一致するパターンです。ここにメタ文字の ^(キャレット)を組み合わせると否定(negation)の意味になり、「ASCII以外の文字」に一致させることができます。
つまり、次の正規表現はすべての非ASCII文字にマッチします。
"[^\\p{ASCII}]"replaceAll()メソッドで非ASCII文字を除去する
Stringクラスの replaceAll() メソッドは、第1引数に正規表現、第2引数に置換後の文字列を受け取り、現在の文字列のうちパターンに一致した部分を指定した文字列へ置き換えます。
そのため、マッチした文字を空文字列 "" に置換すれば、非ASCII文字を簡単に削除できます。
サンプルコード1:replaceAll()を使うシンプルな方法
import java.util.Scanner;
public class Exp {
public static void main( String args[] ) {
Scanner sc = new Scanner(System.in);
String regex = "[^\\p{ASCII}]";
System.out.println("Enter input data:");
String input = sc.nextLine();
String result = input.replaceAll(regex, "");
System.out.println("Result: "+result);
}
}実行結果
Enter input data: whÿ do we fall Result: wh do we fall
サンプルコード2:PatternとMatcherを使う方法
より柔軟な制御が必要な場合は、java.util.regexパッケージの Pattern クラスと Matcher クラスを組み合わせる方法もあります。Matcherの appendReplacement() と appendTail() を使えば、一致した部分だけを置換しながら新しい文字列を組み立てられます。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main( String args[] ) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input string: ");
String input = sc.nextLine();
String regex = "[^\\p{ASCII}]";
// パターンオブジェクトを作成
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: whÿ do we fall Result: wh do we fall
まとめ
正規表現 "[^\\p{ASCII}]" と replaceAll() メソッドを組み合わせれば、文字列から非ASCII文字を1行で取り除くことができます。置換処理を細かく制御したい場合は、PatternとMatcherを活用するとよいでしょう。なお、この方法では日本語などのマルチバイト文字も削除対象になるため、用途に応じて注意して使用してください。
-
Pythonで文字列から特定の文字を削除する方法【replace・正規表現・translate】
replace()メソッドで文字を削除する基本の方法Pythonの文字列(str型)には、部分文字列を別の文字列へ置き換えるためのreplace()メソッドが用意されています。削除したい文字を空文字列()に置き換えることで、その文字を取り除くことができます。>>> Hello people.replace(e, ) Hllo popl正規表現(re.sub)で複数の文字を一度に削除する1行のコードで複数種類の文字をまとめて削除したい場合は、正規表現モジュール re を使うのがおすすめです。削除したい文字を「|」(OR条件)で区切って指定し、re.sub(置換対象パターン, 置
-
Javaで文字列を比較する方法|equals()とequalsIgnoreCase()の使い分けを徹底解説
Javaで文字列の等価性を比較する際は、Stringクラスが提供するequalsメソッドまたはequalsIgnoreCaseメソッドを使用するのが基本です。この記事では、それぞれのメソッドの使い方に加えて、==演算子で文字列を比較してはいけない理由についても詳しく解説します。 equals()メソッドで文字列を比較する 2つの文字列を比較し、大文字と小文字の違いまで厳密に判定したい場合はequals()メソッドを使用します。 次のコード例では、2つのStringインスタンスが大文字小文字を含むすべての文字において一致しているかどうかを判定しています。 public class Compare