2010-11-26 4 views
63

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

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

+0

Посмотрите эту тему: http://stackoverflow.com/questions/3438854/replace-unicode-control-characters-existing-solution – 2010-11-26 07:44:30

ответ

146

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

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

+0

Спасибо Floydit это работает fine.but одна проблемы есть – Tanu 2010-11-26 11:27:33

+0

, когда я использую эту функцию он удаляет все числа, а также. Но я не хочу, чтобы номера удалялись. Просто нужно удалить специальные символы. Пожалуйста, предложите что-нибудь .. – Tanu 2010-11-26 11:28:42

+0

хорошо, что вы сказали, что вам нужен только алфавит. Но я обновляю свой ответ через минуту – 2010-11-26 11:46:57

0

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

55

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

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

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

Здесь

\ ш: слово символа, сокращенно [A-Za-Z_0-9]

\ W: A несловообразующего характер

0

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

4

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

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

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

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

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

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

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