0

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

      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"
4

2 回答 2

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]);
    }
}
于 2013-10-29T11:06:33.673 回答
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表示数字。

于 2013-10-29T10:44:44.917 回答