2013-03-12 1 views
1

Для части моего назначения Java я должен выбрать все записи, имеющие определенный код области. У меня есть пользовательские объекты в пределах ArrayList, например ArrayList<Foo>.Как получить часть номера, которая находится в скобках в Java?

Каждый объект имеет переменную типа String phoneNumber. Они отформатированы как «(555) 555-5555»

Моя цель состоит в том, чтобы искать через каждый пользовательский объект в ArrayList<Foo> (назовет его listOfFoos) и поместите объекты с кодом города «616» в temporaryListOfFoosArrayList<Foo>.

Я изучил токенизаторы, но не смог получить синтаксис правильно. Я чувствую, что то, что мне нужно сделать, похоже на этот пост, но поскольку я только пытаюсь получить первые 3 цифры (и мне все равно, что остальные 7), это действительно не дало мне точно, что я искал. Ignore parentheses with string tokenizer?

То, что я сделал в качестве временной работы вокруг, был ...

for (int i = 0; i<listOfFoos.size();i++){ 
    if (listOfFoos.get(i).getPhoneNumber().contains("616")){ 
    tempListOfFoos.add(listOfFoos.get(i)); 
    } 
} 

Это работает для наших текущего набора данных, однако, если бы было 616 где-нибудь еще в телефонных номерах [как «(555) 616-5555 "], очевидно, что это не сработает должным образом.

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

ответ

1

areaCode = number.substring(number.indexOf('(') + 1, number.indexOf(')')).trim() должен выполнить эту работу за вас, учитывая форматирование номеров телефонов, которые у вас есть.

Или, если у вас нет посторонних мест, просто используйте areaCode = number.substring(1, 4).

1

Я думаю, что вам нужна группа , занимающаяся съемкой. Посмотрите на группы и запишите раздел в этом document.

После того, как вы сделали соответствующий вход с рисунком (например "\((\\d+)\) \\d+-\\d+"), вы можете получить число в скобках, используя matcher (объект java.util.regex.Matcher) с matcher.group(1).

0

Вы можете использовать регулярное выражение, как показано ниже. Образец гарантирует, что весь номер телефона соответствует вашему шаблону ((XXX) XXX-XXXX) плюс захватывает номер в круглых скобках.

int areaCodeToSearch = 555; 
String pattern = String.format("\\((%d)\\) \\d{3}-\\d{4}", areaCodeToSearch); 

Pattern p = Pattern.compile(pattern); 
Matcher m = p.matcher(phoneNumber); 
if (m.matches()) { 
    String areaCode = m.group(1); 
    // ... 
} 

Если вы решите использовать регулярные выражения в сравнении с простой строкой поиска (как указано в других ответах) будет зависеть от того, как потрудились вы о формате всей строки.

2

У вас есть два варианта:

  1. Использование value.startsWith("(616)") или
  2. использовать регулярные выражения с этим рисунком "^\(616\).*"

Первый вариант будет намного быстрее.