这个想法是屏蔽一个字符串,就像用信用卡一样。它可以通过这一行代码来完成。它有效。但是,我找不到在这种情况下使用的正则表达式的任何直接解释。
public class Solution {
public static void main(String[] args) {
String t1 = "518798673672531762319871";
System.out.println(t1.replaceAll(".(?=.{4})", "*"));
}
}
输出为:********************9871
正则表达式的解释:
.(?=.{4})
.
:匹配任何字符(?=
: 前瞻条件的开始.{4}
:断言存在 4 个字符
)
: 前瞻条件结束
简而言之,它匹配输入中当前位置右侧有 4 个字符的任何字符。
替换是"*"
这意味着对于 inout 中的每个匹配字符,替换为单个*
字符,从而在前瞻条件匹配失败时替换信用卡号中除最后 4 个字符之外的所有字符(因为我们在当前位置之前不会有 4 个字符(。
阅读更多关于在正则表达式中环顾四周的信息
?=.{4}
是一个积极的展望。 它匹配括号内的模式(当前字符之后的后 4 位数字(,而不将其包含在与所有其他字符匹配以替换为 * 的主结果(括号外的.
(中
假设您的正则表达式逐个字符遍历输入字符。在第一个数字 (5( 上,它询问"是否有一个字符后跟 4 个其他字符?是的,好的..将 [5] 替换为 *">
它重复此操作,直到 9(从末尾开始第 4 个,此时"在此之后还有 4 个字符吗?"问题变为"否"并且替换停止