基于模式的java格式字符串

时间:2014-10-01 16:47:38

标签: java regex formatting

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

让我们说其中一个数字字符串是“7882347812”。我想根据像3chars.3chars.4chars这样的模式将其格式化为788.234.7812

如果它是一个像“h34jh8we7k”那样的字母数字字母。然后根据像2chars / 4chars / 4chars这样的模式将其格式化为h3 / 4jh8 / we7k。

如果它是像“jkythjyv”那样的alpha版本。然后根据像3chars $ 3chars $ 2chars这样的模式将其格式化为jky $ thj $ yv。

通常,生成的字符串可以包含字符[a-zA-Z0-9]。这应格式化为我上面提到的任何特殊字符。输入应该是字符串&格式化程序和输出应该是格式化的字符串。即使是自定义格式化程序也没关系。

我知道如何为此编写代码。在Java中有没有标准的方法呢?

4 个答案:

答案 0 :(得分:4)

你可以通过replaceAll函数来做到这一点。

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

输出:

788.234.7812

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

输出:

foo bar 788.234.7812

答案 1 :(得分:1)

我得到了一个解决方案:

MaskFormatter formatter = new MaskFormatter("A-AAAA-AAAA-A");
formatter.setValueContainsLiteralCharacters(false);
System.out.println(formatter.valueToString("1222233334"));

输出为1-2222-3333-4

查看http://docs.oracle.com/javase/7/docs/api/javax/swing/text/MaskFormatter.html了解详情

答案 2 :(得分:0)

^(.{3})(.{3})(.{4})$

试试这个。这样可行。参见演示。

http://regex101.com/r/xP1dE9/1

答案 3 :(得分:0)

回答你的问题:

没有"标准"在Java中将字符串解析为3chars.3chars.4chars模式。

正如你所说,你已经知道如何解决这个问题,所以我猜你不需要每个人的答案?