2015-07-13 2 views
3

Я использую регулярное выражение и строку replaceFirst, чтобы заменить шаблоны, как показано ниже.Найти и заменить шаблон строки в java

String xml = "<param>otpcode=1234567</param><param>password=abc123</param>"; 


if(xml.contains("otpcode")){ 
    Pattern regex = Pattern.compile("<param>otpcode=(.*)</param>"); 
    Matcher matcher = regex.matcher(xml); 
    if (matcher.find()) { 
     xml = xml.replaceFirst("<param>otpcode=" + matcher.group(1)+ "</param>","<param>otpcode=xxxx</param>"); 
    } 
} 
System.out.println(xml); 

if (xml.contains("password")) { 
    Pattern regex = Pattern.compile("<param>password=(.*)</param>"); 
    Matcher matcher = regex.matcher(xml); 
    if (matcher.find()) { 
      xml = xml.replaceFirst("<param>password=" + matcher.group(1)+ "</param>","<param>password=xxxx</param>"); 
    } 
} 
System.out.println(xml); 

Желаемая О/р

<param>otpcode=xxxx</param><param>password=abc123</param> 
<param>otpcode=xxxx</param><param>password=xxxx</param> 

Фактическая о/р (заменяет всю строку в одном кадре в первой ПЧ сам по себе)

<param>otpcode=xxxx</param> 
<param>otpcode=xxxx</param> 

ответ

4

Вы должны сделать неживое регулярное выражение:

<param>otpcode=(.*?)</param> 
<param>password=(.*?)</param> 

Это будет соответствовать первым </param> не последним ...

+0

Отличный !!! Спасибо ! – RedGuts

+0

@RedGuts Отметьте правильный ответ. – ozgur

+0

@RedGuts без проблем человек рад, что я мог бы помочь! – brso05

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