2013-03-12 60 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\).*"

第一种选择将是快了很多。