2015-08-28 126 views
-2

我需要一个代码来使用正则表达式来掩盖字符串。 需要屏蔽位与长度大于或等于4。使用在java中表达的regualr的掩码字符串

public class Mask{ 
String data="+918033667777,,,2,,,4937015106932345,,,1,3,,,,467298364729038,,24789438292,,7979,,,,,,,1,,1"; 
    public static void main(String[] args){ 
     data = data.replaceAll("(?<=\\D)\\d{4}(?=\\D)", "****").replaceAll("\\d{12}(?=\\d{4})", "************"); 
     System.out.println(data); 
    } 
} 

输出:918033667777 ,,, 2 ,,, *************** ,, ,1,3- ,,,, *************** ,, *********** ,, **** ,,,,,,, 1 ,, 1" I,EI需要屏蔽位数,其长度大于或等于4。

+0

'data'和'dialSequence'是同一件事吗? –

+0

@NicholasRobinson是的他们是一样的 – Archana

+0

但是'+ 918033667777'也是一个长度大于4的数字。我得到'+ ************ ,,, 2 ,,, **** ************ ,,, 1,3 ,,,, *************** ,, *********** ,, **** ,,,,,,, 1,,1' [我的代码示例](http://ideone.com/6yS9zu)。请检查您的要求。 –

回答

4

尝试使用:

(?<=,)\d(?=\d{3,})|(?!\A)\G\d 

DEMO

  • (?<=,) - 为逗号
  • 正回顾后
  • \d(?=\d{3,}) - 数字后跟三个另一个数字(正 前瞻)
  • (?!\A)\G\d - 检查比赛从在以前的比赛不放过,后按数字持续,(?!\A)是不匹配String中的第一个数字。但是,如果你不想只匹配由+前面的数字,它是多余的

实例中的Java:

public class Test{ 

    public static void main(String[] args){ 
     String data="+918033667777,,,2,,,4937015106932345,,,1,3,,,,467298364729038,,24789438292,,7979,,,,,,,1,,1"; 
     data = data.replaceAll("(?<=,)\\d(?=\\d{3,})|(?!\\A)\\G\\d", "*"); 
     System.out.println(data); 
    } 
} 

与输出:

918033667777 ,,, 2 ,,, **************** ,,, 1,3- ,,,, *************** ,, *** ******** ,, **** ,,,,,,, 1,,1

+0

来替换确切的数字位数小的简化Java版本:'replaceAll(“(?<!\\ d)\\ d(?= \ \ d {3})| \\ G \\ d“,”*“)' – Pshemo

+0

@Pshemo但它也会匹配第一个数字,因为'\ D'匹配也是'+' –

+0

@Pshemo我不想先屏蔽一组数字(+918033667777)。需要用逗号(,)后面的数字掩码 – Archana

相关问题