I'm trying to mask all the occurences of AccountNumber in my XML response code. The AccountNumber has 16 digits and I want to mask first 12 digits and retain last four.
XML response:
<ns2:PaymentMethod>
  <CCInfo xmlns="">
           <AccountType>sdaj</AccountType>
           <AccountNumber>1234567890123456</AccountNumber>
           <AccountName>sdfsad</AccountName>
           <ExpirationMonth>sdaf</ExpirationMonth>
           <ExpirationYear>afgds</ExpirationYear>
    </CCInfo>
  </ns2:PaymentMethod>
  <ns2:PaymentMethod>
  <CCInfo xmlns="">
           <AccountType>kyfkuk</AccountType>
           <AccountNumber>098765432123987</AccountNumber>
           <AccountName>hjvkv</AccountName>
           <ExpirationMonth>gfdgh</ExpirationMonth>
           <ExpirationYear>tdjk</ExpirationYear>
    </CCInfo>
  </ns2:PaymentMethod>
Below is my java code:
String accountNumberPatternString ="<AccountNumber>(^.{12})";
Pattern accountNumberPattern = Pattern.compile(accountNumberPatternString);
Matcher matcher = accountNumberPattern.matcher(data);
String maskedResult = matcher.replaceAll("<AccountNumber>*******");
I'm expecting the result as:
<AccountNumber>************3456</AccountNumber>
but I'm getting the result as:
<AccountNumber>1234567890123456</AccountNumber>
 
     
     
    