Подтвердить что ты не робот

Как заменить специальные символы в строке?

У меня есть строка с большим количеством специальных символов. Я хочу удалить все эти, но сохранить алфавитные символы.

Как я могу это сделать?

4b9b3361

Ответ 1

Это зависит от того, что вы имеете в виду. Если вы просто хотите избавиться от них, сделайте следующее:
(Обновление: по-видимому, вы хотите также сохранить цифры, используйте в этом случае вторую строку)

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}]+","");

(Все это можно значительно улучшить, предварительно скомпилировав шаблон регулярного выражения и сохранив его в константе)

Или, Guava:

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, посмотрите на эти вопросы:

Ответ 2

Я использую это.

s = s.replaceAll("\\W", ""); 

Он заменяет все специальные символы из строки.

Здесь

\ w: символ слова, сокращенный для [a-zA-Z_0-9]

\ W: символ без слова

Ответ 3

Вы можете использовать следующий метод для хранения буквенно-цифровых символов.

replaceAll("[^a-zA-Z0-9]", "");

И если вы хотите сохранить только алфавитные символы, используйте этот

replaceAll("[^a-zA-Z]", "");

Ответ 4

string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");

Здесь все специальные символы, кроме пробела, запятой и амперсанда, заменяются. Вы также можете опустить пробел, запятую и амперсанд следующим регулярным выражением.

string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");

Где Input - это строка, которая нам нужна для замены символов.

Ответ 5

Замените любые специальные символы на

replaceAll("\\your special character","new character");

например: заменить все вхождения * пробелом

replaceAll("\\*","");

* это утверждение может заменить только один тип специального символа за раз

Ответ 6

Следуя примеру ответа 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;
    }
}

Ответ 7

Вы можете использовать базовые регулярные выражения для строк, чтобы найти все специальные символы или использовать классы шаблонов и классов для поиска/изменения/удаления определенных пользователем строк. Эта ссылка содержит несколько простых и понятных примеров для регулярных выражений: http://www.vogella.de/articles/JavaRegularExpressions/article.html

Ответ 8

Вы можете получить unicode для этого мусорного символа из инструмента charactermap в окне pc и добавить \u, например.\u00a9 для символа авторского права. Теперь вы можете использовать эту строку с этим конкретным нежелательным caharacter, не удалять символ нежелательной почты, а заменять соответствующим юникодом.

Ответ 9

Для пробелов используйте "[^ az AZ 0-9]" этот шаблон