Java String.replaceAll метод очистки телефонных номеров

#java #string #replaceall

#java #строка #replaceall

Вопрос:

У меня есть поле базы данных с именем TelephoneName. В этом поле я получил разные форматы телефонных номеров.

Теперь мне нужно разделить их на код страны и номер подписчика.

Например, я увидел телефонный номер 49 (0)711/61947-xx.

Я хочу удалить всю косую черту, скобки, минус, пробел. Результатом может быть 49 (код страны) и 071161947** (вспомогательный номер).

Как я могу это сделать с помощью метода replaceAll?

replaceAll("//()-","") это правильно?

Дело в том, что у меня много неформатированных телефонных номеров, таких как: 49 04261 85120 32027400050 Применение каждого телефонного номера к одному и тому же алгоритму отличается от применения каждого телефонного номера к одному и тому же алгоритму

Комментарии:

1. Если вы хотите записать код страны и номер абонента, вы можете использовать вместо этого регулярное выражение.

Ответ №1:

replaceAll Метод принимает регулярное выражение в качестве аргумента. Чтобы удалить все, кроме цифр и , вы могли бы, таким образом, сделать

 str = str.replaceAll("[^0-9 ]", "")
 

Вот более полный пример, который также определяет код страны (на основе индекса ( символа):

 String str = " 49 (0)711 / 61947-12";

int lpar = str.indexOf('(');
String countryCode = str.substring(0, lpar).trim();
String subscriber  = str.substring(lpar).trim();

subscriber = subscriber.replaceAll("[^0-9]", "");

System.out.println(countryCode);  // prints  49
System.out.println(subscriber);   // prints 07116194712
 

replaceAll("//()-","") это правильно?

Нет, не совсем. Это приведет к удалению всех //- подстрок. Чтобы удалить эти символы, вам нужно вставить их [...] , например, так: replaceAll("[/()-]", "") / не нужно экранировать).

Комментарии:

1. Обратите внимание, что вы можете сначала получить код страны, поскольку коды стран различаются по длине.

Ответ №2:

Первый аргумент replaceAll() является шаблоном регулярных выражений, поэтому то, что вы хотите сделать, это заставить его соответствовать всем не цифрам (и ). Вы можете сделать это, используя конструкцию «[^ …]» (не одну из …) :

 mystring.replaceAll("[^0-9 ]", "")
 

Ответ №3:

Нет, это не работает.

ReplaceAll() Заменяет каждую подстроку этой строки, которая соответствует заданному регулярному выражению, заданной заменой.

Таким образом, ваше выражение заменит все экземпляры в числе, которые выглядят как /()' пустое пространство.

Вам нужно сделать что-то вроде

 String output = " 49 (0)711 / 61947-xx".replaceAll("[//()-]","");
 

Квадратные скобки делают его символьным классом регулярных выражений (‘Либо косая черта, либо открытая скобка, либо закрывающая скобка, либо дефис’), а не литералом (‘косая черта, за которой следует открытая скобка, за которой следует закрывающая скобка, за которой следует дефис.’).

Комментарии:

1. Я могу ошибаться, но я думаю, вам нужны две косые черты в java, чтобы избежать символа косой черты? (Так что это escape для Java, а не для регулярных выражений.) Затем, если вы хотите использовать экранированную косую черту в регулярном выражении, вам понадобятся четыре косых //// черты в вашей строке.

2. Я думаю, вы путаете его с обратной косой чертой.

Ответ №4:

Это можно сделать просто с помощью :

 s=s.replace("/","");
s=s.replace("(","");
s=s.replace(")","");
 

Затем подстройте его, чтобы получить код страны.

Комментарии:

1. Он также написал пробелы, так что не забудьте пробел, табуляцию, новую строку, возврат каретки, перевод формы, вертикальную вкладку … Я думаю, вы поняли мою точку зрения 😉