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


Я хочу, чтобы удалить специальные символы, такие как:

- + ^ . : ,

из строки с использованием Java.

8 69

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("[-+^]*", "");

Он должен удалить все {'^', '+', '-'} символы, которые вы хотели удалить!

это заменит все символы, кроме буквенно-цифровых

replaceAll("[^A-Za-z0-9]","");

использовать String.replaceAll() метод в Java. replaceAll должно быть достаточно для вашей проблемы.

чтобы удалить символ Specail

String t2 = "!@#$%^&*()-';,./?><+abdd";

t2 = t2.replaceAll("\\W+","");

результат должен выглядеть так : abdd.

это отлично работает.

вы можете удалить один символ следующим образом:

String str="+919595354336";

 String result = str.replaceAll("\\+","");

 System.out.println(result);

выход:

919595354336

Если вы просто хотите сделать литеральную замену в java, используйте Pattern.quote(string) для экранирования любой строки в литерал.

myString.replaceAll(Pattern.quote(matchingStr), replacementStr)