在android中使用replaceAll和regex来提取字符串中的数字

时间:2013-10-29 09:41:20

标签: android regex extract replaceall

我想从长字符串中提取一个数字 我的代码是:

      private String[] icons;
  private String[] pages;
            icons=geticons.split(";");
            pages=article.split(";");
            int i=0;
            for (String page:pages)
            {
                pages[i].replaceAll("(image)([0-9])", icons[$2]);
                i++;
       }

但图标[$ 2]错误。 如何解决它。

示例: 图标元素:

{"yahoo.com/logo.jpg" , "yahoo.com/logo3.jpg", "yahoo.com/logo8.jpg"}

页面元素:

"hello how image0 ar you? where image3 are you? image8"

输出:

"hello how yahoo.com/logo.jpg  ar you? where yahoo.com/logo3.jpg are you? yahoo.com/logo8.jpg"

2 个答案:

答案 0 :(得分:0)

首先,你的for循环毫无意义。要么使用 i ,要么完全省略它:

 for (String page:pages) {
      page.replaceAll("(image)([0-9])", icons[2]);
  }

其次,java中数组中的元素可以通过索引直接访问:

arr[index]

在您的情况下,那将是be icons[2]

最后,您的正则表达式将仅考虑图像名称中的一位数。因此,如果你有image10,它将无法正确识别。我会用:

"(image)([0-9]+)"

因为+量词意味着“一次或多次”。另外,您可以将[0-9]替换为表示数字的\\d

答案 1 :(得分:0)

试试这个:

Pattern pattern = Pattern.compile("(image)([0-9]+)");

for(int i = 0; i < pages.length; i++) {

    Matcher matcher = pattern.matcher(pages[i]);
    while(matcher.find()) {

        String imageNumber = matcher.group(2); // I guess this is what you wanted to get with '$2'
        int n = Integer.parseInt(imageNumber);
        pages[i] = pages[i].replace(matcher.group(0), icons[n]);
    }
}