大家好我正在使用以下函数来检查java中的连续数字
这里面临的问题是它仅适用于第一个连续数字
例如,它适用于123456789123456XXXX, 但希望此工作连续任何地方 XXXX123456789123456或XX123456789123456XX
更新
现在,如果我找到13个连续数字,那么我需要将所有连续数字传递给掩码函数
我的结果应该是这样的
输入123456789123456XXXX结果应为123456 %%%%% 3456XXXX
输入XXXX123456789123456结果应为XX123456 %%%%% 3456XX
请帮我解决这个问题
我的守则
public void checkPosCardNoAndMask(String cardNo) {
String maskNumber = "";
String starValue = "";
boolean isConsecutive = false;
int checkConsecutive = 0;
for (int i = 0, len = cardNo.length(); i < len; i++) {
if (Character.isDigit(cardNo.charAt(i))) {
maskNumber = maskNumber + cardNo.charAt(i);
} else {
if (checkConsecutive >= 13)
isConsecutive = true;
else
break;
starValue = starValue + cardNo.charAt(i);
}
checkConsecutive++;
}
if (isConsecutive)
{
cardNo = maskCCNumber(maskNumber) + starValue;
System.out.printIn("Consecutive found!!:"+cardNo);
}
else
{
System.out.printIn("Consecutive not found!!:"+cardNo);
}
}
Run Code Online (Sandbox Code Playgroud)
掩盖逻辑
public String maskCCNumber(String ccNo)
{
String maskCCNo = "";
for (int i = 0; i < ccNo.length(); i++)
{
if (i > 5 && i < ccNo.length() - 4)
{
maskCCNo = maskCCNo + '%';
}
else
{
maskCCNo = maskCCNo + ccNo.charAt(i);
}
}
return maskCCNo;
}
Run Code Online (Sandbox Code Playgroud)
有了regex你可以这样说:
String str = "XX123456789123456XX";
if (str.matches(".*\\d{13}.*")) {
System.out.println(true);
Pattern compile = Pattern.compile("\\d+");
Matcher matcher = compile.matcher(str);
matcher.find();
String masked = maskCCNumber(matcher.group());//send 123456789123456 and returns 123456%%%%%3456
String finalString=str.replaceAll("\\d+", masked);// replace all digits with 123456%%%%%3456
System.out.println(finalString);
}
Run Code Online (Sandbox Code Playgroud)
输出:
true
XX123456%%%%%3456XX
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
968 次 |
| 最近记录: |