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

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

- + ^ . : ,

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

Ответы [ 8 ]

231 голосов
/ 26 сентября 2011

Это зависит от того, что вы определяете как специальные символы, но попробуйте replaceAll(...):

String result = yourString.replaceAll("[-+.^:,]","");

Обратите внимание, что символ ^ не должен быть первым в списке, так как вы бы потомлибо нужно убежать от него, либо это будет означать «любой, кроме этих символов».

Еще одно примечание: символ - должен быть первым или последним в списке, в противном случае вам придется его избегатьили он будет определять диапазон (например, :-, будет означать «все символы в диапазоне от : до ,).

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

String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");


Если вы хотите избавиться от всех знаков препинания и символов, попробуйте следующее регулярное выражение: \p{P}\p{S} (имейте в виду, что в строках Java вам придется избегать обратной косой черты: "\\p{P}\\p{S}").

Третий способ может быть что-то вроде этогоs, если вы можете точно определить, что должно остаться в вашей строке:

String  result = yourString.replaceAll("[^\\w\\s]","");

Это означает: заменить все, что не является символом слова (az в любом случае, 0-9 или _) или пробелом.

Редактировать: обратите внимание, что есть несколько других шаблонов, которые могут оказаться полезными.Однако я не могу объяснить их все, поэтому взгляните на справочный раздел регулярные-выражения.info .

Вот менее ограничительная альтернатива подходу «определения разрешенных символов»,как подсказал Рэй:

String  result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");

Регулярное выражение соответствует всему, что не является буквой на любом языке и не является разделителем (пробел, разрыв строки и т. д.).Обратите внимание, что вы не можете использовать [\P{L}\P{Z}] (верхний регистр P означает отсутствие этого свойства), поскольку это будет означать «все, что не является буквой или не является пробелом», что почти соответствует всему, поскольку буквы не являются пробелами и наоборот.

Дополнительная информация о Unicode

Некоторые символы Unicode, кажется, вызывают проблемы из-за различных возможных способов их кодирования (в виде одной кодовой точки или комбинации кодовых точек).).Пожалуйста, обратитесь к регулярные-выражения.info для получения дополнительной информации.

16 голосов
/ 06 октября 2015

Как описано здесь http://developer.android.com/reference/java/util/regex/Pattern.html

Шаблоны - это скомпилированные регулярные выражения.Во многих случаях удобные методы, такие как String.matches, String.replaceAll и String.split, будут предпочтительнее, но если вам нужно проделать большую работу с одним и тем же регулярным выражением, может быть более эффективно скомпилировать его один раз и повторно использоватьЭто.Класс Pattern и его компаньон Matcher также предлагают больше функциональных возможностей, чем небольшое количество, предоставляемое String.

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
14 голосов
/ 26 сентября 2011

Попробуйте replaceAll() метод класса String.

Кстати, вот метод, тип возвращаемого значения и параметры.

public String replaceAll(String regex,
                         String replacement)

Пример:

String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!";
str = str.replaceAll("[-+^]*", "");

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

13 голосов
/ 08 декабря 2017

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

replaceAll("[^A-Za-z0-9]","");
3 голосов
/ 04 сентября 2017

Удалить специальный символ

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

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

Вывод будет: abdd.

Это прекрасно работает.

2 голосов
/ 26 сентября 2011

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

1 голос
/ 19 декабря 2016

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

String str="+919595354336";

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

 System.out.println(result);

ВЫВОД:

919595354336
0 голосов
/ 26 июля 2017

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

myString.replaceAll(Pattern.quote(matchingStr), replacementStr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...