为了账号安全,请及时绑定邮箱和手机立即绑定

使用正则表达式屏蔽字符串的一部分

使用正则表达式屏蔽字符串的一部分

慕森王 2023-07-19 10:38:23
这个想法是像信用卡一样屏蔽字符串。用这一行代码就可以完成。它有效。但是,我找不到本例中使用的正则表达式的任何直接解释。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 个字符) )。


查看完整回答
反对 回复 2023-07-19
?
喵喔喔

TA贡献1735条经验 获得超5个赞

?=.{4}是积极的前瞻。它匹配括号内的模式(当前字符后的接下来的 4 位数字),而不将其包含在与.所有其他字符匹配的主结果(括号外)中以替换为 *

假设您的正则表达式逐个字符地遍历输入。在第一个数字 (5) 上,它询问“是否有一个字符后跟 4 个其他字符?是的,好的..用 * 替换 [the 5]”

它重复此操作,直到第 9 个(从末尾算起的第 4 个字符),此时“此后还有 4 个字符吗?”问题变为“否”并且替换停止


查看完整回答
反对 回复 2023-07-19
  • 2 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信