Java:强制String为一定长度并间隔开

时间:2015-02-18 11:26:06

标签: java string substring

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()方法来做到这一点?

5 个答案:

答案 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

Regex Demo