Как удалить специальные символы из строки?
Я хочу, чтобы удалить специальные символы, такие как:
- + ^ . : ,
из строки с использованием Java.
8 ответов:
зависит от того, что вы определяете как специальные символы, но попробовать
replaceAll(...)
:String result = yourString.replaceAll("[-+.^:,]","");
отметим, что
^
символ не должен быть первым в списке, так как вам придется либо избегать его, либо это будет означать "любой, кроме этих символов".еще одно примечание:
-
символ должен быть первым или последним в списке, иначе вам придется его избежать или он определит диапазон ( например,:-,
будет означать " все символы в диапазоне:
до,
).Итак, чтобы сохранить согласованность и не зависеть от расположения символов, вы можете избежать всех тех символов, которые имеют особое значение в регулярных выражениях (следующий список не является полным, поэтому имейте в виду другие символы, такие как
(
,{
,$
etc.):String result = yourString.replaceAll("[\-\+\.\^:,]","");
Если вы хотите избавиться от всех знаков препинания и символов, попробовать это регулярное выражение:\p{P}\p{S}
(имейте в виду, что в строках Java вам придется побег назад косые черты:"\p{P}\p{S}"
).третий способ может быть что-то вроде этого, если вы можете точно определить, что должно быть оставлено в вашей строке:
String result = yourString.replaceAll("[^\w\s]","");
это означает: замените все, что не является символом слова (a-z в любом случае, 0-9 или _) или пробелом.
редактировать: обратите внимание, что есть несколько других моделей, которые могут оказаться полезными. Однако я не могу объяснить их все, поэтому взгляните на справочный раздел regular-expressions.info.
вот менее ограничительная альтернатива подходу "определить разрешенные символы", предложенному Ray:
String result = yourString.replaceAll("[^\p{L}\p{Z}]","");
регулярное выражение соответствует всему, что не является буквой на любом языке и не является разделителем (пробел, разрыв строки и т. д.). Обратите внимание, что вы не можете использовать
[\P{L}\P{Z}]
(верхний регистр P означает отсутствие этого свойства), так как это будет означать "все, что не является буквой или не пробелом", что почти соответствует всему, так как буквы не являются пробелами и наоборот.дополнительная информация о Unicode
некоторые символы юникода, по-видимому, вызывают проблемы из-за различных возможных способов их кодирования (как одна кодовая точка или комбинация кодовых точек). Пожалуйста, обратитесь к regular-expressions.info для получения дополнительной информации.
как описано здесь http://developer.android.com/reference/java/util/regex/Pattern.html
Шаблоны скомпилированных регулярных выражений. Во многих случаях, удобные методы, такие как
String.matches
,String.replaceAll
иString.split
будет предпочтительнее, но если вам нужно много работать с одним и тем же регулярным выражением, может быть более эффективно скомпилировать его один раз и повторно использовать. Класс Pattern и его компаньон, Matcher, также предлагают больше функциональности, чем небольшой сумма, выставленная строкой.public class RegularExpressionTest { public static void main(String[] args) { System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()(")); System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^(")); } public static String getOnlyDigits(String s) { Pattern pattern = Pattern.compile("[^0-9]"); Matcher matcher = pattern.matcher(s); String number = matcher.replaceAll(""); return number; } public static String getOnlyStrings(String s) { Pattern pattern = Pattern.compile("[^a-z A-Z]"); Matcher matcher = pattern.matcher(s); String number = matcher.replaceAll(""); return number; } }
результат
String is = one Number is = 9196390097
попробовать
replaceAll()
методString
класса.кстати, вот метод, тип возвращаемого значения и параметров.
public String replaceAll(String regex, String replacement)
пример:
String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!"; str = str.replaceAll("[-+^]*", "");
Он должен удалить все {'^', '+', '-'} символы, которые вы хотели удалить!
использовать
String.replaceAll()
метод в Java. replaceAll должно быть достаточно для вашей проблемы.
чтобы удалить символ Specail
String t2 = "!@#$%^&*()-';,./?><+abdd"; t2 = t2.replaceAll("\\W+","");
результат должен выглядеть так :
abdd.
это отлично работает.