首页 > 解决方案 > DecimalFormat - 它可以处理电话号码、SSN 等吗?

问题描述

我发现以下结果出乎意料:

format           number          result            expected
"000-00-0000"    123456789L      "123456789--"     "123-45-6789"
"(###)###-####"  1234567890L     "(1234567890)-"   "(123)456-7890"
"_($* "-"_)"     0               " $ \t- 0"         " $ \t- "

它不能处理电话号码、社会保险号码等非数字格式吗?

标签: javadecimalformat

解决方案


它可能会被黑客入侵,但它并不是为此目的而创建的。这类任务可以由正则表达式承担,并且更加有效和富有表现力。

第一个例子可以简化为以下

String regex = "^(\\d{3})(\\d{2})(\\d{4})$";
String input = 123456789L + "";

System.out.println(input.replaceAll(regex, "$1-$2-$3")); // 123-45-6789

第二个到以下

String regex = "^(\\d{3})(\\d{3})(\\d{4})$";
String input = 1234567890L + "";

System.out.println(input.replaceAll(regex, "($1)$2-$3")); // (123)456-7890

等等...


推荐阅读