Java - удаление странных символов из строки - PullRequest
16 голосов
/ 28 марта 2011

Как удалить странные и нежелательные символы Unicode (например, черный ромб с вопросительным знаком) из строки?

Обновлено:

Скажите, пожалуйста, строку символов Unicode или регулярное выражение, чтосоответствуют «черный бриллиант с вопросительным знаком в нем».

Ответы [ 9 ]

17 голосов
/ 28 марта 2011

Черный бриллиант с вопросительным знаком не является символом юникода - это заполнитель для символа, который ваш шрифт не может отобразить. Если в строке есть глиф, которого нет в шрифте, который вы используете для отображения этой строки, вы увидите заполнитель. Это определяется как U + FFFD: . Его внешний вид зависит от используемого шрифта.

Вы можете использовать java.text.normalizer для удаления символов Unicode, которые не входят в «нормальный» набор символов ASCII.

16 голосов
/ 28 марта 2011

Вы можете использовать String.replaceAll("[my-list-of-strange-and-unwanted-chars]","")

Нет Character.isStrangeAndUnWanted(), вам нужно определить, что вы хотите.

Если вы хотите удалить управляющие символы, вы можете сделать

String str = "\u0000\u001f hi \n";
str = str.replaceAll("[\u0000-\u001f]", "");

печатает hi (сохраняет пробел).

РЕДАКТИРОВАТЬ Если вы хотите узнать Unicode любого 16-битного символа, вы можете сделать

int num = string.charAt(n);
System.out.println(num);
6 голосов
/ 18 апреля 2014

Для удаления нелатинских символов из строки я использую следующий код:

String s = "小米体验版 latin string 01234567890";
s = s.replaceAll("[^\\x00-\\x7F]", "");

Выходная строка будет: "латинская строка 01234567890"

4 голосов
/ 14 июня 2011

Джастин Томас был рядом, но это, вероятно, ближе к тому, что вы ищете:

String nonStrange = strangeString.replaceAll("\\p{Cntrl}", ""); 

Селектор \ p {Cntrl} выбирает " Управляющий символ: [\ x00- \ x1F \ x7F]. "

2 голосов
/ 28 марта 2011

Использование String.replaceAll () :

String clean = "♠clean".replaceAll('♠', '');
0 голосов
/ 13 сентября 2017

фильтр английский, китайский, цифры и знаки препинания

str = str.replaceAll("[^!-~\\u20000-\\uFE1F\\uFF00-\\uFFEF]", "");
0 голосов
/ 08 апреля 2014

то же самое случилось со мной, когда я конвертировал clob в строку, используя getAsciiStream.

эффективно решил это, используя

public String getstringfromclob(Clob cl)
{
    StringWriter write = new StringWriter();
    try{
        Reader read  = cl.getCharacterStream();     
    int c = -1;
    while ((c = read.read()) != -1)
    {
        write.write(c);
    }
    write.flush();
    }catch(Exception ec)
    {
        ec.printStackTrace();
    }
    return write.toString();

}
0 голосов
/ 28 марта 2011

Поместите символы, от которых вы хотите избавиться, в список массивов, затем выполните итерацию по массиву методом replaceAll:

String str = "Some text with unicode !@#$";
ArrayList<String> badChar = new ArrayList<String>();
badChar= ['@', '~','!']; //modify this to contain the unicodes

for (String s : badChar) {
   String resultStr = str.replaceAll(s, str);
}

вы получите очищенную строку "resultStr" не проверял это, но по линии.

0 голосов
/ 28 марта 2011

Вы не можете, потому что строки неизменны.

Однако можно создать новую строку, в которой удалены ненужные символы. Посмотрите строку # replaceAll ().

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