cardNumber should be an 16 character string e.g. 1111222233334444.
getCardNumber() should return this as the formatted version
e.g. 1111 2222 3333 4444.
我如何确保字符串长度为16个字符,然后如何在示例中将其分隔出来?有没有办法使用Substring()方法来做到这一点?
答案 0 :(得分:2)
尝试使用这样的正则表达式:
public static void main(String... strings) {
String s = "1111222233334444";
System.out.println(s.matches("\\d{16}")); // check whether string contains exactly 16 digits
String newString = s.replaceAll("(\\d{4})", "$1"+" ").trim(); // replace every %4th digit by digit+" "
System.out.println(newString);
}
O / P:
true
1111 2222 3333 4444
答案 1 :(得分:1)
您可以使用TheLostMind
所示的正则表达式或者更简单:
String cardNumber = ...; // input
if (cardNumber.length() == 16) { // input is correct
return cardNumber.substring(0, 4) + " "
+ cardNumber.substring(4, 8) + " "
+ cardNumber.substring(8, 12) + " "
+ cardNumber.substring(12, 16);
} else {
// length is incorrect
}
答案 2 :(得分:1)
使用String.length()检查号码的长度。
然后,让DecimalFormat为您执行格式化工作:
DecimalFormat df = new DecimalFormat();
df.setGroupingSize(4);
df.setGroupingUsed(true);
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setGroupingSeparator(' ');
df.setDecimalFormatSymbols(dfs);
System.out.println(df.format(new BigDecimal("1234567890123456")));
如果输入包含任何非数字字符,BigDecimal将抛出异常。
答案 3 :(得分:0)
不必要的复杂版本:
public static void main(String[] args) {
String cardNumber = "1111222233334444";
StringBuilder result = new StringBuilder();
if (cardNumber.length() != 16) {
System.out.println("Wrong length");
} else {
for (int i = 0; i < cardNumber.length(); i++) {
result.append(cardNumber.charAt(i));
if (i != 0 && (i + 1) % 4 == 0 && i != cardNumber.length() - 1)
result.append(" ");
}
System.out.println(result.toString()); //print result as string or use in method
}
}
}
实际上,请使用正则表达式或子字符串。
答案 4 :(得分:0)
您可以尝试以下基于回顾的正则表达式。
String s = "1111222233334444";
if(s.matches("\\d{16}"))
{
System.out.println(s.replaceAll("(?!^)(\\d{4})(?=(?:\\d{4})*$)", " $1"));
}
<强>输出:强>
1111 2222 3333 4444