4

✀ ✁ ✂ ✃ ✄ ✅ ✆ ✇ ✈ などのすべての UTF-8 句読点文字と記号を文字列から除外するための最良かつ最も効率的な方法は何ですか。他の言語 (ą、ę、ó など) の文字を保持したいので、az、AZ、および 0-9 以外のすべての文字を単純に除外することはできません。よろしくお願いします。

4

4 に答える 4

3

\p{L}すべてのユニコード文字に一致させるために使用できます。例:

public static void main(String[] args) throws IOException {
    String[] test = {"asdEWR1", "ąęóöòæûùÜ", "sd,", "✀","✁","✂","✃","✄","✅","✆","✇","✈"};
    for (String s : test)
        System.out.println(s + " => " + s.replaceAll("[^\\p{L}^\\d]", ""));
}

出力:

asdEWR1 => asdEWR1
ąęóöòæûùÜ => ąęóöòæûùÜ
sd, => sd
✀ => 
✁ => 
✂ => 
✃ => 
✄ => 
✅ => 
✆ => 
✇ => 
✈ => 
于 2013-05-13T16:41:03.703 に答える
3

Unicodeバイナリ分類の組み合わせを試してください:

String fixed = value.replaceAll("[^\\p{IsAlphabetic}\\p{IsDigit}]", "");
于 2013-05-13T16:38:49.603 に答える
1

アイデアは、最初にアクセントを削除することです。

public static String onlyASCII(String s) {
    // Decompose any ŝ into s and combining-^.
    String s2 = Normalizer.normalize(s, Normalizer.Form.NFD);
    // Removee all non-ASCII
    return s2.replaceAll("[^\\u0000-\\u007E\\pL]", "");
}

ギリシャ\\pL文字などに。

于 2013-05-13T16:52:24.703 に答える
0

「句読点」という用語はかなりあいまいです。このCharacterクラスは、Unicode 仕様で定義された文字カテゴリの少なくとも一部にマップされるgetType()メソッドを提供するため、おそらくここから始めるのが最適です。

テストがはるかに単純になる可能性が高いため、「否定的な」ロジック (句読点なし) ではなく、「肯定的な」ロジック (たとえば、すべての文字と数字) を適用することもお勧めします。

于 2013-05-13T16:38:21.483 に答える