Как заменить специальные символы в строке? - PullRequest
77 голосов
/ 26 ноября 2010

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

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

Ответы [ 9 ]

173 голосов
/ 26 ноября 2010

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

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

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

Или с помощью Гуава :

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, посмотрите на следующие вопросы:

60 голосов
/ 28 февраля 2013

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

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

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

Здесь

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

\ W: несловесный символ

9 голосов
/ 29 ноября 2014

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

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

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

replaceAll("[^a-zA-Z]", "");
2 голосов
/ 09 августа 2018

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

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

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

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

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

2 голосов
/ 03 марта 2015
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");

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

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

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

1 голос
/ 14 апреля 2019

Следуя примеру ответа Анджея Дойла , я думаю, что лучшим решением будет использование 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;
    }
}
0 голосов
/ 16 апреля 2018

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

0 голосов
/ 26 августа 2014

Вы можете получить юникод для этого ненужного символа из инструмента символов в окне ПК и добавить, например, символ авторского права.Теперь вы можете использовать эту строку с этим конкретным символом нежелательной почты, не удаляя какой-либо ненужный символ, а заменяя его соответствующим юникодом.

0 голосов
/ 26 ноября 2010

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

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