2013-12-20 209 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我明白你的痛苦。但避免这种操作的正则表达式仍然是正确的调用,所以我很高兴我的回答站在记录。 –