【发布时间】:2017-07-03 20:14:02
【问题描述】:
我试图在我的 XML 响应代码中屏蔽所有出现的 AccountNumber。 AccountNumber 有 16 位数字,我想屏蔽前 12 位数字并保留后四位。
XML 响应:
<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>
下面是我的java代码:
String accountNumberPatternString ="<AccountNumber>(^.{12})";
Pattern accountNumberPattern = Pattern.compile(accountNumberPatternString);
Matcher matcher = accountNumberPattern.matcher(data);
String maskedResult = matcher.replaceAll("<AccountNumber>*******");
我期待的结果是:
<AccountNumber>************3456</AccountNumber>
但我得到的结果是:
<AccountNumber>1234567890123456</AccountNumber>
【问题讨论】:
-
为什么
^在你的模式中? -
一种解决方案是从 xml 中提取 AN。一旦你有了它:你可以使用: String.format("%1$" + AN.length() + "s", AN.subString(13,15).replace(" ","*");跨度>
-
希望您使用有效的方法将 xml 流转换为字符串,以免损坏过程中的数据。