2013-08-01 2 views
-2

Я пытаюсь взять строку и удалить все символы из полукокса в другую одинКак удалить определенные символы из строки в определенных местах?

Примера строку:

String personAndPhone = " Dave (206515608)" 

Я хочу, чтобы преобразовать эту строку в две строк, имя человека и номер телефона (без «()»).

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

+0

Подсказка: 'substring()' –

+0

@NarendraPathai: No. – Qix

ответ

3

Попробуйте

String a[] = personAndPhone.trim().replaceAll("[()]", "").split(" "); 

a[0] -> Dave 
a[1] -> 206515608 
2

Я замечаю, что у вас есть места вокруг него, поэтому первое, что я сделаю, это обрезать.

personAndPhone = personAndPhone.trim(); 

Дальше у вас есть место посередине, что может быть приятной точкой расщепления.

String[] tokens = personAndPhone.split(" "); 

String name = tokens[0]; 
// now contains: Dave 

Далее, вы можете удалить скобки из числа:

String number = tokens[1].replaceAll("[()]", ""); 

// now contains: 206515608 

Или, как @EvgeniyDorofeev поставил более сжато:

String[] tokens = personAndPhone.trim().replaceAll("[()]", "").split(" "); 
String name = tokens[0]; 
String number = tokens[1]; 
2

I 'd склонны использовать регулярные выражения чтобы сделать что-то вроде этого: -

String personAndPhone = " Dave (206515608)" 
Pattern pattern = Pattern.compile("([A-Za-z]+)\s\(([0-9]+)\)"); 
Matcher matcher = pattern.matcher(personAndPhone); 

String name = matcher.group(1) 
String number = matcher.group(2) 

Возможно, вы можете сделать свое регулярное выражение немного более сложным, как вам нужно. Это позволит вам разобрать немного более строго. У вас также есть намного больше контроля над проверкой точности и длины с помощью регулярных выражений.

См http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

+0

Возможно, что шаблон названия слишком упрощен ... – assylias

+0

Потенциально, хотя я упомянул и предоставил документацию, чтобы сделать его более сложным. Регулярные выражения не сложны, чтобы учиться, а ложка кормления - не обязательно хороший способ помочь каждому. Это должно позволить человеку задавать вопрос, чтобы понять другую точку зрения для решения его проблемы и дать ему возможность улучшить его по своим собственным требованиям. – chrisw

+0

Не может быть '\ s * (\ w +) \ s * \ ((\ d +) \)' или даже '\ s * (\ w + (?: \ S \ w +)?) \ S * \ ((\ d +) \) 'для первого/последнего имени. – Qix

3

Использование регулярных выражений:

String name = str.replaceAll("\\s*(.*)\\s*\\(.*", "$1"); 
String phone = str.replaceAll(".*?\\((.*)\\).*","$1"); 

Обе эти линии заменить весь вход с 1-й группы, который захватывает цель.

«Имя» - это все, что связано с кронштейном, исключая пробелы с обоих концов, поэтому он не будет захватывать «John Smith 3rd» без проблем.

«Телефон» - это все между первым и последним кронштейнами, поэтому он будет захватывать «(01) 5678 9876« от »Дэйва ((01) 5678 9876)».

+0

+1; либо это, либо ответ @ chrisw69, в зависимости от случая использования. Я бы также рекомендовал использовать '. +', '[^ \ S] +' или даже '\ w +' внутри группы 1 на первом, в зависимости. Кроме того, если вторая/первая группа в первом/втором регулярном выражении (соответственно) являются просто цифрами, используйте '\ d +'. – Qix

+1

@Qix Что делать, если имя имеет пробелы и shat, если в телефоне есть пробелы и/или скобки. см. текст в моем ответе. – Bohemian

+0

> '..., в зависимости'. Просто альтернативы, если он им нужен. – Qix

Смежные вопросы