Java String.replaceAll метод для очистки телефонных номеров - PullRequest
1 голос
/ 24 октября 2011

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

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

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

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 24 октября 2011

Метод 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("[/()-]", "")/ не нужно экранировать).

2 голосов
/ 24 октября 2011

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

mystring.replaceAll("[^0-9+]", "")
0 голосов
/ 24 октября 2011

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

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

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

0 голосов
/ 24 октября 2011

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

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

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

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

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

Квадратные скобки делают его классом регулярных выражений ('Или косая черта, или открытая скобка, или закрывающая скобка, или гипен'), а не литералом ('косая черта, сопровождаемая открытой скобкой, сопровождаемая закрывающей скобкой, сопровождаемой гипсом.').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...