String source = " 1234567890123456 t 1234 5678 9012 3456";
String result1, result2;
// Variant 1
Pattern p1 = Pattern.compile("([\\d\\s]{4,})([\\s]{0,})([\\d]{2})(?:[\\d]{2})([\\s]{0,})(?:[\\d]{4})([\\s]{0,})([\\d\\s]{4})");
result1 = p1.matcher(source).replaceAll("$1$2$3**$4****$5$6");
// Variant 2
Pattern p2 = Pattern.compile("[\\d\\s]{12,20}");
Matcher m = p2.matcher(source);
result2 = source;
while (m.find())
result2 = result2.substring(0, m.start() + 12)
+ result2.substring(m.start() + 12, m.end() - 11).replaceAll("\\d", "*")
+ result2.substring(m.end() - 11, result2.length());
System.out.println(source); // 1234567890123456 t 1234 5678 9012 3456
System.out.println(result1); // 123456******3456 t 1234 56** **** 3456
System.out.println(result2); // 123456******3456 t 1234 5*** **** 3456