2013-10-29 14 views
0

一些我想從一個長的字符串 我的代碼是提取號碼:使用的replaceAll和正則表達式中的Android的提取物串

 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" 
+1

你爲什麼要使用一個 '$' 符號?在Java中,你可以像這樣訪問一個數組的元素:'icons [2]'。還是我錯過了什麼? – grexter89

+0

我想訪問([0-9])並將其用於數組的訪問元素? – user2790938

+0

你爲什麼不用'i'作爲索引? – grexter89

回答

0

首先,你的循環是沒有意義的。要麼使用,或者完全忽略它:

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

其次,在Java數組中的元素是由索引直接訪問:

arr[index] 

在你的情況,這將be icons[2]

最後,你的正則表達式將只考慮圖像名稱中的一個數字。因此,如果你有image10例如,它將不會被正確識別。我會用:

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

因爲+量詞的意思是「一次或多次」。另外,您可以將[0-9]替換爲\\d,表示數字。

+0

我的問題是圖標[$ 2]?!如何解決它? – user2790938

+0

圖標[2],我已經寫過了 – Maggie

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]); 
    } 
} 
+0

什麼是m?!錯誤「m」?! – user2790938

+0

我的不好,我修好了 – grexter89

+0

對不起,但是「替換」錯誤?!告訴eclips更換全部 – user2790938