猿问

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

这个想法是像信用卡一样屏蔽字符串。用这一行代码就可以完成。它有效。但是,我找不到本例中使用的正则表达式的任何直接解释。


public class Solution {

    public static void main(String[] args) {


        String t1 = "518798673672531762319871";

        System.out.println(t1.replaceAll(".(?=.{4})", "*"));

    }

}

输出是:********************9871


慕森王
浏览 133回答 2
2回答

心有法竹

正则表达式的解释:.(?=.{4}).: 匹配任意字符(?=:先行条件的开始.{4}: 断言存在 4 个字符): 前瞻条件结束简而言之,它匹配输入中当前位置右侧有 4 个字符的任何字符。替换"*"意味着对于 inout 中的每个匹配字符,替换为单个*字符,从而在先行条件匹配失败时替换信用卡号中除最后 4 个字符之外的所有字符(因为我们不会在当前位置前面有 4 个字符) )。

喵喔喔

?=.{4}是积极的前瞻。它匹配括号内的模式(当前字符后的接下来的 4 位数字),而不将其包含在与.所有其他字符匹配的主结果(括号外)中以替换为 *假设您的正则表达式逐个字符地遍历输入。在第一个数字 (5) 上,它询问“是否有一个字符后跟 4 个其他字符?是的,好的..用 * 替换 [the 5]”它重复此操作,直到第 9 个(从末尾算起的第 4 个字符),此时“此后还有 4 个字符吗?”问题变为“否”并且替换停止
随时随地看视频慕课网APP

相关分类

Java
我要回答