2012-09-23 79 views
4

我是android開發的noob,我試圖從字符串中刪除一串動態字符。我的字符串:如何從字符串中刪除動態字符字符串?

"Beginning of String....<img src="http://webaddress.com" height="1" width="1"/>" 

我想刪除 「& LT」, 「& GT」,以及它們之間的一切。我想要的只是「字符串的開始......」到目前爲止,我已經嘗試過這種方式,但沒有成功。

description = description.replaceFirst("(?s)(&lt)(.*?)(&gt)","$1$3"); 

另外我試過這個類似的類似的字符串,它工作正常,所以我不明白我做錯了什麼。

description = description.replaceFirst("(?s)(<sub>)(.*?)(</sub>)","$1$3"); 

我班

public class RssReader { 

private final static String BOLD_OPEN = "<B>"; 
private final static String BOLD_CLOSE = "</B>"; 
private final static String BREAK = "<BR>"; 
private final static String ITALIC_OPEN = "<I>"; 
private final static String ITALIC_CLOSE = "</I>"; 
private final static String SMALL_OPEN = "<SMALL>"; 
private final static String SMALL_CLOSE = "</SMALL>"; 


public static List<JSONObject> getLatestRssFeed(){ 
    String feed = "http://feeds.feedburner.com/MetalMarketCommentary"; 
    //http://globoesporte.globo.com/dynamo/futebol/times/vasco/rss2.xml 
    //http://feeds.feedburner.com/GoldMoneyGoldResearch + 
    //http://feeds.feedburner.com/GoldsilvercomNews + 
    //http://feed43.com/7466558277232702.xml 
    //http://feeds.feedburner.com/SilverGoldDaily 
    //http://feeds.feedburner.com/MetalMarketCommentary 
    //http://link.brightcove.com/services/player/bcpid1683318714001?bckey=AQ~~,AAAAC59qSJk~,vyxcsD3OtBPHZ2UIrFX2-wdCLTYNyMNn&bclid=1644543007001&bctid=1854182861001 

    RSSHandler rh = new RSSHandler(); 
    List<Article> articles = rh.getLatestArticles(feed); 
    Log.e("RSS ERROR", "Number of articles " + articles.size()); 
    return fillData(articles); 
} 



private static List<JSONObject> fillData(List<Article> articles) { 

    List<JSONObject> items = new ArrayList<JSONObject>(); 
    for (Article article : articles) { 
     JSONObject current = new JSONObject(); 
     try { 
      buildJsonObject(article, current); 
     } catch (JSONException e) { 
      Log.e("RSS ERROR", "Error creating JSON Object from RSS feed"); 
     } 
     items.add(current); 
    } 

    return items; 
} 



private static void buildJsonObject(Article article, JSONObject current) throws JSONException { 
    String title = article.getTitle(); 
    String description = article.getDescription(); 
    description = description.replaceFirst("(?s)(<sub>)(.*?)(</sub>)","$1$3"); 
    int start = description.indexOf(".&"); 
    description= description.substring(0, start); 
    String date = article.getPubDate(); 
    String imgLink = article.getImgLink(); 

    StringBuffer sb = new StringBuffer(); 
    sb.append(BOLD_OPEN).append(title).append(BOLD_CLOSE); 
    sb.append(BREAK); 
    sb.append(description); 
    sb.append(BREAK); 
    sb.append(SMALL_OPEN).append(ITALIC_OPEN).append(date).append(ITALIC_CLOSE).append(SMALL_CLOSE); 

    current.put("text", Html.fromHtml(sb.toString())); 
    current.put("imageLink", imgLink); 
} 
} 

XML我解析

<item> 
      <title>Gold Market Recap Report</title> 
      <link>http://feedproxy.google.com/~r/MetalMarketCommentary/~3/jGYtkXdSKWs/mid-session-gold_703.html</link> 
      <description>&lt;img src="http://www.cmegroup.com/images/1x1trans.gif?destination=http://www.cmegroup.com/education/market-commentary/metals/2012/09/mid-session-gold_703.html" alt=""/&gt;For the week December gold forged a trading range of roughly $37 an ounce. With gold prices attimes seemingly on the rocks and poised for a downside washout it was a change of pace to see afresh upside breakout in the Friday morning trade....&lt;img src="http://feeds.feedburner.com/~r/MetalMarketCommentary/~4/jGYtkXdSKWs" height="1" width="1"/&gt;</description> 
      <pubDate>Fri, 21 Sep 2012 19:50:37 GMT</pubDate> 
      <guid isPermaLink="false">http://www.cmegroup.com/education/market-commentary/metals/2012/09/mid-session-gold_703.html?source=rss</guid> 
      <dc:date>2012-09-21T19:50:37Z</dc:date> 
      <feedburner:origLink>http://www.cmegroup.com/education/market-commentary/metals/2012/09/mid-session-gold_703.html?source=rss</feedburner:origLink> 
     </item> 
+2

(1)當你說「沒有成功」時,你是什麼意思? (2)你怎麼寫'&lt'和'&gt',而不是'<'和'>'? (3)你說你也想刪除'&lt'和'&gt',但是你的代碼用'&lt;(...)(&gt)'替換爲'&lt;&gt;'。爲什麼是這樣? – ruakh

+0

@ruakh我是新來的正則表達式和fromt他toturials我讀我的理解是,代碼將刪除「字符串開始」後 –

回答

2
String string = "Beginning of String....&lt;img src=\"http://webaddress.com\" height=\"1\" width=\"1\"/&gt;"; //Escape whatever has to be escaped 
    System.out.println(string); 
    int start = string.indexOf("&"); 
    int end = string.lastIndexOf("&"); 
    String temp = string.substring(start, (end+3)); 
    string = string.replace(temp, ""); 
    System.out.println(string); 

這將刪除& LT和& GT,包括它們之間的任何東西。

+1

主&失敗<失敗>失敗「 – Qtax

+0

感謝您的答覆。它需要更具適應性,因爲我將xml解析爲字符串,然後附加html標籤,因此我不能隨後刪除所有內容。我會發布我的課程。檢查我的編輯 –

+0

@Qtax Hahaha:P –

0

您不必使用正則表達式來執行此操作。

創建一個方法,該方法將查找並刪除以&lt;開頭並以&gt;結尾並以循環運行的子字符串。

String mstring = "Beginning of String....&lt;img src="http://webaddress.com" height="1" width="1"/&gt;"; 
// You'll need to escape the double quotes if you're explicitly setting the string 

public boolean containsTags() 
{ 
    boolean lt, gt; 

    lt = mstring.contains("&lt;"); 
    gt = mstring.contains("&gt;"); 

    return (lt || gt); 
} 

public void removeTags() 
{ 
    int indexof_lt, indexof_gt; 

    indexof_lt = mstring.indexOf("&lt;"); 
    indexof_gt = mstring.indexOf("&gt;"); 

    String str_first, str_last; 

    str_first = mstring.substring(0, indexof_lt); 
    str_last = mstring.substring(indexof_gt + indexof_gt.length); 

    mstring = str_first + str_last; 
} 

public void removeAllTags() 
{ 
    while(containsTags) 
    { 
     removeTags(); 
    } 
}