這個想法是像信用卡一樣屏蔽字符串。用這一行代碼就可以完成。它有效。但是,我找不到本例中使用的正則表達式的任何直接解釋。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
提交
取消