Как заменить специальные символы в строке?
У меня есть строка с множеством специальных символов. Я хочу удалить все это, но сохранить алфавитные символы.
Как я могу это сделать?
8 ответов
Это зависит от того, что вы имеете в виду. Если вы просто хотите избавиться от них, сделайте это:
(Обновление: очевидно, вы также хотите сохранить цифры, в этом случае используйте вторые строки)
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, посмотрите на эти вопросы:
Я использую это.
s = s.replaceAll("\\W", "");
Он заменяет все специальные символы из строки.
Вот
\w: символ слова, сокращение от [a-zA-Z_0-9]
\ W: несловесный символ
Вы можете использовать следующий метод для сохранения буквенно-цифровых символов.
replaceAll("[^a-zA-Z0-9]", "");
И если вы хотите сохранить только буквы алфавита, используйте это
replaceAll("[^a-zA-Z]", "");
Замените любые специальные символы на
replaceAll("\\your special character","new character");
например: заменить все вхождения * пробелом
replaceAll("\\*","");
* это утверждение может заменить только один тип специального символа за раз
Следуя примеру ответа Анджея Дойла, я думаю, что лучшим решением будет использование 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;
}
}
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");
Здесь заменяются все специальные символы, кроме пробела, запятой и амперсанда. Вы также можете опустить пробел, запятую и амперсанд с помощью следующего регулярного выражения.
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");
Где Input - это строка, которую мы должны заменить символами.
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();
Вы можете использовать базовые регулярные выражения для строк, чтобы найти все специальные символы, или использовать шаблоны и классы соответствия для поиска / изменения / удаления определенных пользователем строк. Эта ссылка содержит несколько простых и понятных примеров для регулярных выражений: http://www.vogella.de/articles/JavaRegularExpressions/article.html
Вы можете получить Unicode для этого ненужного символа из инструмента символов в Windows и добавить, например, символ авторского права. Теперь вы можете использовать эту строку с этим конкретным символом нежелательной почты, не удаляя любой ненужный символ, а заменяя его соответствующим юникодом.