如何检索Java中括号内的数字部分?

时间:2013-03-12 20:32:11

标签: java parsing arraylist stringtokenizer

对于我的部分Java分配,我需要选择具有特定区域代码的所有记录。我在ArrayList中有自定义对象,例如ArrayList<Foo>

每个对象都有一个String phoneNumber变量。它们的格式如“(555)555-5555”

我的目标是搜索ArrayList<Foo>中的每个自定义对象(称之为listOfFoos),并将区号为“616”的对象放入temporaryListOfFoos ArrayList<Foo>

我查看过tokenizer,但无法正确识别语法。我觉得我需要做的就是这个帖子,但是因为我只想检索前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位数而给我建议,而忽略括号,我会非常感激。

4 个答案:

答案 0 :(得分:2)

您有两种选择:

  1. 使用value.startsWith("(616)")或,
  2. 使用此模式"^\(616\).*"
  3. 的正则表达式

    第一个选项会更快。

答案 1 :(得分:1)

考虑到您拥有的电话号码格式,

areaCode = number.substring(number.indexOf('(') + 1, number.indexOf(')')).trim()应该为您完成这项工作。

或者,如果您没有任何无关的空格,只需使用areaCode = number.substring(1, 4)

答案 2 :(得分:1)

我认为您需要的是捕获组。请查看此document中的群组和捕获部分。

完成输入与模式匹配后(例如"\((\\d+)\) \\d+-\\d+"),您可以使用matcherjava.util.regex.Matcher的对象)和{{matcher.group(1)来获取括号中的数字1}}。

答案 3 :(得分: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);
  // ...
}

您是否选择使用正则表达式而不是简单的字符串查找(如其他答案中所述)将取决于您对整个字符串格式的困扰。