2014-02-17 168 views
0

我想在Java中使用模式和匹配器搜索字符串中的元素。在Java中使用模式和匹配器搜索字符串中的元素

我有一個節點variant-items,需要獲取所有在這些節點之間的字符。 我試過下面的正則表達式,但它完全跳過了這一行。 但是,如果我在記事本++中使用相同的正則表達式搜索,我正在得到所需的結果選定。請指教。

<variant-items>((.|\n)*)</variant-items> 

下面是我的實行

String patternSourceComponent = "<variant-items>((.|\n)*)</variant-items>"; 
      String result=this.isMatched(patternSourceComponent, xml); 

public String isMatched(String patternSourceComponent,String xml) 
    { 
    String varientItem=""; 
    try{ Pattern patternComponent = Pattern.compile(patternSourceComponent); 
      Matcher matcherComponent = patternComponent.matcher(xml); 

      System.out.println("matcherComponent Find : "+matcherComponent.find()); 
      while (matcherComponent.find()) { 
       varientItem=matcherComponent.group(0).trim(); 
       System.out.println("varientItem : "+varientItem); 
      } } 
      catch (Exception e) 
      { 
      System.out.println("Exception : "+e); 
      } 

    return varientItem; 
    } 
+0

在java中使用'\'時需要轉義某些字符 – Sanjeev

+2

不應該使用正則表達式解析XML(http://stackoverflow.com/a/1758162/896588),請使用正確的XML而不是像JDOM那樣的解析器。 –

回答

1

我會親自使用Java DOM來檢查你的節點。對XML使用正則表達式是一場噩夢,任何試圖使用它的代碼在未來很可能會崩潰。試試像這樣獲取'variant-items'節點的字符串內容。

File xmlFile = new File("your_xml.xml"); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(xmlFile); 

NodeList nList = doc.getElementsByTagName("variant-items"); 
for (int i = 0; i < nList.getLength(); i++) { 
    Node node = nList.item(i); 
    System.out.println(node.getNodeValue()); 
} 

上面的代碼在xml文件中打印所有'variant-items'節點的值。

如果資源/速度的考慮是一個問題(比如your_xml.xml很大),那麼使用SAX可能會更好,它會更快(代碼更多一點)並且不會將XML存儲在內存中。

+0

在上面我已經使用解析器來解析,然後將其轉換爲字符串。我的要求是找到這個正則表達式是否出現在我得到的字符串變量中。 –

+0

@AjayMuraleedran - 如果是這樣的話,爲什麼不在你將它轉換爲字符串之前檢查你的解析器**? –