这个想法是像信用卡一样屏蔽字符串。用这一行代码就可以完成。它有效。但是,我找不到本例中使用的正则表达式的任何直接解释。public class Solution { public static void main(String[] args) { String t1 = "518798673672531762319871"; System.out.println(t1.replaceAll(".(?=.{4})", "*")); }}输出是:********************9871
2 回答
心有法竹
TA贡献1866条经验 获得超5个赞
正则表达式的解释:
.(?=.{4})
.
: 匹配任意字符(?=
:先行条件的开始.{4}
: 断言存在 4 个字符
)
: 前瞻条件结束
简而言之,它匹配输入中当前位置右侧有 4 个字符的任何字符。
替换"*"
意味着对于 inout 中的每个匹配字符,替换为单个*
字符,从而在先行条件匹配失败时替换信用卡号中除最后 4 个字符之外的所有字符(因为我们不会在当前位置前面有 4 个字符) )。
喵喔喔
TA贡献1735条经验 获得超5个赞
?=.{4}
是积极的前瞻。它匹配括号内的模式(当前字符后的接下来的 4 位数字),而不将其包含在与.
所有其他字符匹配的主结果(括号外)中以替换为 *
假设您的正则表达式逐个字符地遍历输入。在第一个数字 (5) 上,它询问“是否有一个字符后跟 4 个其他字符?是的,好的..用 * 替换 [the 5]”
它重复此操作,直到第 9 个(从末尾算起的第 4 个字符),此时“此后还有 4 个字符吗?”问题变为“否”并且替换停止
添加回答
举报
0/150
提交
取消