【问题标题】:How to retrieve portion of number that's within parenthesis in Java?如何检索Java括号内的数字部分?
【发布时间】:2013-03-12 20:32:10
【问题描述】:

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

每个对象都有一个字符串 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 位数字而忽略括号给我建议,我将不胜感激。

【问题讨论】:

    标签: java parsing arraylist stringtokenizer


    【解决方案1】:

    你有两个选择:

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

    第一个选项会快很多。

    【讨论】:

      【解决方案2】:

      areaCode = number.substring(number.indexOf('(') + 1, number.indexOf(')')).trim() 应该为您完成这项工作,因为您拥有电话号码的格式。

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

      【讨论】:

        【解决方案3】:

        我认为你需要的是一个捕获组。查看document 中的组和捕获部分。

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

        【讨论】:

          【解决方案4】:

          您可以使用如下所示的正则表达式。该模式将确保整个电话号码符合您的模式 ((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);
            // ...
          }
          

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-12-14
            • 2022-06-13
            • 1970-01-01
            • 1970-01-01
            • 2017-03-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多