Подтвердить что ты не робот

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

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

- + ^ . : ,

из строки, использующей Java.

4b9b3361

Ответ 1

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

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

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

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

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

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.

Здесь менее ограничительная альтернатива подходу "define allowed characters", предложенная Ray:

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

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

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

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

Ответ 2

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

Кстати, это метод, возвращаемый тип и параметры.

public String replaceAll(String regex,
                         String replacement)

Пример:

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

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

Ответ 3

Как описано здесь 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

Ответ 4

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

Ответ 5

Удаление символа Specail

Строка t2 = "! @# $% ^ & *() - ';,/? > < + abdd";

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

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

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

Ответ 6

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

String str="+919595354336";

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

 System.out.println(result);

ВЫВОД:

919595354336

Ответ 7

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

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

Ответ 8

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

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