2013-12-20 151 views
-4
String htmlString ="<font color='#00ff00' size='100'> SampleText </font>" 

這是一個樣本String,我需要的字體大小變化從100到25,我的意思是original font size/4如何替換字符串

是否有上述問題的任何解決方案?

結果字符串應該是:"<font color='#00ff00' size='25'> SampleText </font>"

我認爲它是更多鈔票與正規表示法所以在這裏我將正則表達式標籤也 htmlString.replaceAll(正則表達式,正則表達式)做;

+0

爲什麼Ç標籤?僅僅因爲* string *這個詞? – haccks

+0

請更清楚地解釋你的問題。你想解析字體的原始字符串並將它除以4嗎?你試過什麼了? – bknopper

+0

您使用Java還是C?你有兩個標籤,但我肯定不是這種情況... –

回答

1

我認爲使用正則表達式工作得更好。

private static String setSize(String htmlString) { 
    String reg = "size='[0-9]+'"; 
    Pattern pattern = Pattern.compile(reg); 
    Matcher matcher = pattern.matcher(htmlString); 
    while (matcher.find()) { 
     String sizeString = matcher.group(); 
     pattern = Pattern.compile("[0-9]+"); 
     Matcher numMatcher = pattern.matcher(sizeString); 
     if (numMatcher.find()) { 
      String size = numMatcher.group(); 
      int realSize = Integer.parseInt(size); 
      int resultSize = realSize/4; 
      String resultSizeString = "size='" + resultSize + "'"; 
      htmlString = htmlString.replaceAll(sizeString, resultSizeString); 

     } 
    } 
    return htmlString; 
} 
+1

謝謝你的代碼工作,還有一個問題'String htmlString =「 SampleText SampleText」;'如何在所有地方替換大小 – user2065281

+0

' size = 10'? –

+0

我修改了可以代替所有地方的尺寸的答案。你可以嘗試一下代碼。 – Longwayto

0

您可以將字符串存儲在兩個變量font_sizehtml_template和使用sprintf功能「編譯」的價值觀模板你想如下:

char* html_template = "<font color='#00ff00' size='%d'> SampleText </font>"; 
int font_size = superFontSizeCalculation(); 
char* compiled_html = malloc(strlen(html_template)); 

sprintf(compiled_html, html_template, font_size); 

我不檢查的任何回報str *函數,但在實際使用中,您應該這樣做。

編輯:正如你改變主意,想知道java和不C,你可以通過將標籤模板串有一個小模板引擎相同的機制,並通過自己的價值觀更換標籤編譯。

例如:

static final String FONT_SIZE_TAG = "<FONT_SIZE_TAG>"; 
static final String FONT_COLOR_TAG = "<FONT_COLOR_TAG>"; 

String htmlString ="<font color='" + FONT_COLOR_TAG + "' size='" + FONT_SIZE_TAG + "'> SampleText </font>"; 

String compiled = htmlString.replace(FONT_COLOR_TAG, "#00ff00").replace(FONT_SIZE_TAG, String.valueOf(FONT_COLOR_TAG)); 
+0

搭配像OP想要一個Java解決方案。 –

+1

是的,很高興有一致的OPs ... – nesderl

+0

當有疑問時,在回答問題之前詢問評論。 –

-1
String htmlString ="<font color='#00ff00' size='100'> SampleText </font>"; 
      int pos1=htmlString.indexOf("size='"); 
      if(pos1!=-1){ 
       int pos3=pos1+6; /*6 is the length of size=' */ 
       String tempString=htmlString.substring(pos3, htmlString.length()); 
       int pos2=tempString.indexOf("'"); 
       if(pos2!=-1){ 
        String sizeString=htmlString.substring(pos3, pos3+pos2); 
        String stringToReplace=htmlString.substring(pos1,pos3+pos2+1); 
        int size=Integer.parseInt(sizeString); 
        int newSize=size/4; 
        String newString="size'"+newSize+"'";       
        htmlString=htmlString.replace(stringToReplace, newString); 
       } 
      } 
+1

呃...早上好? –

+0

感謝這段代碼的工作原理 – user2065281

+0

@ user2065281 - 如果有效,那麼爲什麼減去投票? –

0

我所理解的這個問題:「這是可能的正則表達式,如果是,我怎麼辦呢?」

答案是否定的。

待辦事項使用正則表達式解析或修改HTML。它不起作用。它不能在數學上工作。

檢查:RegEx match open tags except XHTML self-contained tags

你總是會發現大部分時間工作,但無法在其他例子的解決方案。所以,除非您能夠接受您的解決方案是不完整的,正則表達式應該真的不是一個解決方案。

+0

這裏的問題在於OP只是在尋找免費的代碼。可悲的是[這是提供給他](http://stackoverflow.com/a/20701563/474189)。 –

+0

@Duncan我明白你的痛苦。但避免這種操作的正則表達式仍然是正確的調用,所以我很高興我的回答站在記錄。 –