Как удалить символы с высоким ASCII из строки, такой как ®, ©, ™ в Java - PullRequest
8 голосов
/ 15 февраля 2011

Я хочу обнаруживать и удалять символы высокого ASCII, такие как ®, ©, ™, из строки в Java.Есть ли библиотека с открытым исходным кодом, которая может сделать это?

Ответы [ 4 ]

30 голосов
/ 15 февраля 2011

Если вам нужно удалить все символы, отличные от US-ASCII (то есть за пределами 0x0-0x7F), вы можете сделать что-то вроде этого:

s = s.replaceAll("[^\\x00-\\x7f]", "");

Если вам нужно отфильтровать много строк, это будетлучше использовать предварительно скомпилированный шаблон:

private static final Pattern nonASCII = Pattern.compile("[^\\x00-\\x7f]");
...
s = nonASCII.matcher(s).replaceAll();

И если он действительно критичен к производительности, возможно, предложение Алексея Николаенкова будет лучше.

16 голосов
/ 15 февраля 2011

Я думаю, что вы можете легко отфильтровать вашу строку вручную и проверить код конкретного символа.Если он соответствует вашим требованиям, добавьте его к StringBuilder и в конце сделайте toString().

public static String filter(String str) {
    StringBuilder filtered = new StringBuilder(str.length());
    for (int i = 0; i < str.length(); i++) {
        char current = str.charAt(i);
        if (current >= 0x20 && current <= 0x7e) {
            filtered.append(current);
        }
    }

    return filtered.toString();
}
5 голосов
/ 15 февраля 2011

Хороший способ сделать это - использовать Google Guava CharMatcher :

String newString = CharMatcher.ASCII.retainFrom(string);

newString будет содержать только символы ASCII (кодовая точка <128) из исходной строки. </p>

Это читается более естественно, чем регулярное выражение.Для последующих читателей вашего кода регулярные выражения могут потребовать больше усилий для понимания.

1 голос
/ 16 января 2016

Я понимаю, что вам нужно удалить: ç, ã, Ã, но для всех, кому нужно конвертировать ç, ã, Ã ---> c, a, A пожалуйста, посмотрите на этот кусок кода:

Пример кода:

final String input = "Tĥïŝ ĩš â fůňķŷ Šťŕĭńġ";
System.out.println(
    Normalizer
        .normalize(input, Normalizer.Form.NFD)
        .replaceAll("[^\\p{ASCII}]", "")
);

Выход:

Это классная строка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...