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++;
       }

しかしicons[$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]

最後に、正規表現はイメージ名の 1 桁のみを考慮します。したがって、たとえば image10 がある場合、正しく認識されません。私は使うだろう:

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

+ 量指定子は「1 回以上」を意味するためです。[0-9]さらに、数字を\\d表す which に置き換えることができます。

于 2013-10-29T10:44:44.917 に答える