2013-12-20 3 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>"

я думаю, что это делать Возможное с регулярным expresion, поэтому я здесь, добавив регулярное выражение тег также htmlString.replaceAll (RegularExpression, RegularExpression);

+0

Почему C тег? Просто из-за слова * 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

спасибо ur код работает и еще один вопрос 'String htmlString =" SampleText SampleText ";' как заменить размер во всех местах – user2065281

+0

Что относительно ' size = 10'? –

+0

Я изменил ответ, который может заменить размер во всех местах. Вы можете попробовать код. – Longwayto

0

Вы можете хранить строку в двух переменных font_size и html_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

Я понимаю, что вопрос «возможно ли это с регулярным выражением, и если да, то как я могу это сделать?»

Ответ отрицательный.

Do не использовать regex для анализа или изменения html. Это не работает. Он не может математически работать.

Проверил: RegEx match open tags except XHTML self-contained tags

Вы всегда найдете решение, которое работает большую часть времени но терпит неудачу на других примерах. Поэтому, если вы не согласны с тем, что ваше решение является неполным, регулярное выражение должно действительно не будет решением проблемы.

+0

Проблема в том, что OP просто ищет бесплатный код. К сожалению [это было предоставлено ему] (http://stackoverflow.com/a/20701563/474189). –

+0

@ Duncan Я понимаю вашу боль. Но избежать регулярного выражения для такого рода операций по-прежнему остается правильным, поэтому я рад, что мой ответ стоит в записи. –

Смежные вопросы