DecimalFormat - может ли он обрабатывать телефонные номера, номера SSN и т. Д.? - PullRequest
2 голосов
/ 11 марта 2019

Я обнаружил следующее с неожиданными результатами:

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

Разве он не может обрабатывать нечисловые форматы, такие как номера телефонов, номера социального страхования и т. Д.?

1 Ответ

0 голосов
/ 11 марта 2019

Вероятно, это можно было бы взломать, но он не был создан для этих целей. Подобные задачи могут решаться с помощью регулярных выражений и быть гораздо более эффективными и выразительными.

Первый пример можно упростить до следующего

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

И так далее ...

...