2013-03-12 39 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

我覺得你需要的是一個捕獲組。看看中的組和捕獲部分。

一旦完成匹配用圖案(例如"\((\\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\).*"

第一種選擇將是快了很多。

相關問題