特殊文字がたくさんある文字列があります。それらはすべて削除したいが、アルファベット文字は残しておく。
これどうやってするの?
回答:
それはあなたの意味次第です。それらを取り除くだけの場合は、
次のようにします(更新:数字も保持したいようです。その場合は2行目を使用してください)。
String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");
または同等:
String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");
(これらすべては、正規表現パターンをプリコンパイルして定数に格納することで大幅に改善できます)
または、グアバで:
private static final CharMatcher ALNUM =
CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z'))
.or(CharMatcher.inRange('0', '9')).precomputed();
// ...
String alphaAndDigits = ALNUM.retainFrom(input);
しかし、アクセント付きの文字を、まだASCIIの賢明なものに変えたい場合は、次の質問を見てください。
これを使っています。
s = s.replaceAll("\\W", "");
文字列のすべての特殊文字を置き換えます。
ここに
\ w:単語の文字、[a-zA-Z_0-9]の短縮形
\ W:非単語文字
Andrzej Doyleの答えの例に従って、私はより良い解決策を使用することだと思いますorg.apache.commons.lang3.StringUtils.stripAccents()
:
package bla.bla.utility;
import org.apache.commons.lang3.StringUtils;
public class UriUtility {
public static String normalizeUri(String s) {
String r = StringUtils.stripAccents(s);
r = r.replace(" ", "_");
r = r.replaceAll("[^\\.A-Za-z0-9_]", "");
return r;
}
}
文字列で基本的な正規表現を使用してすべての特殊文字を検索するか、パターンおよびマッチャークラスを使用してユーザー定義の文字列を検索/変更/削除できます。このリンクには、正規表現の単純で理解しやすい例がいくつかあります。http://www.vogella.de/articles/JavaRegularExpressions/article.html