java 基于模式的格式化字符串

Ani*_*Ani 1 java regex formatting

我有这样的需求。我的代码生成随机字符串,它可以是字母、数字和字母数字。

假设其中一个数字字符串是“7882347812”。我想根据 3chars.3chars.4chars 等模式将其格式化为 788.234.7812

如果它是字母数字的,例如“h34jh8we7k”。然后根据 2chars/4chars/4chars 等模式将其格式化为 h3/4jh8/we7k。

如果它是像“jkythjyv”这样的阿尔法。然后根据 3chars$3chars$2chars 等模式将其格式化为 jky$thj$yv。

一般来说,生成的字符串可以包含字符[a-zA-Z0-9]。这应该按照我上面提到的任何特殊字符进行格式化。输入应该是字符串和格式化程序,输出应该是格式化的字符串。即使是自定义格式化程序也可以。

我知道如何为此编写代码。Java 有没有标准的方法来做到这一点?

Ani*_*Ani 7

我对此有一个解决方案:

MaskFormatter formatter = new MaskFormatter("A-AAAA-AAAA-A");
formatter.setValueContainsLiteralCharacters(false);
System.out.println(formatter.valueToString("1222233334"));
Run Code Online (Sandbox Code Playgroud)

输出将为 1-2222-3333-4

检查http://docs.oracle.com/javase/7/docs/api/javax/swing/text/MaskFormatter.html了解更多详细信息


Avi*_*Raj 5

您可以通过replaceAll 函数来完成此操作。

System.out.println("7882347812".replaceAll("^(\\d{3})(\\d{3})(\\d{4})$", "$1.$2.$3"));
Run Code Online (Sandbox Code Playgroud)

输出:

788.234.7812
Run Code Online (Sandbox Code Playgroud)

或者

System.out.println("foo bar 7882347812".replaceAll("\\b(\\d{3})(\\d{3})(\\d{4})\\b", "$1.$2.$3"));
Run Code Online (Sandbox Code Playgroud)

输出:

foo bar 788.234.7812
Run Code Online (Sandbox Code Playgroud)