#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. Он также написал пробелы, так что не забудьте пробел, табуляцию, новую строку, возврат каретки, перевод формы, вертикальную вкладку … Я думаю, вы поняли мою точку зрения 😉