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

3
我有这样的需求:我的代码会生成随机字符串,它可以是字母、数字或字母数字混合的组合。
例如,其中一个数字字符串为“7882347812”。我希望按照“3个字符.3个字符.4个字符”的模式将其格式化为788.234.7812。
如果是字母数字混合的字符串,如“h34jh8we7k”,则应按照“2个字符/4个字符/4个字符”的模式进行格式化,格式化后的结果为h3/4jh8/we7k。
如果只是字母字符串,如“jkythjyv”,则应按照“3个字符$3个字符$2个字符”的模式进行格式化,格式化后的结果为jky$thj$yv。
总之,生成的字符串可以包含字母[a-zA-Z0-9]。应按照我上述提到的任何特殊字符格式化。输入应该是字符串和格式化程序,输出应该是格式化后的字符串。即使使用自定义格式化程序也没有问题。
我知道如何编写此代码。在Java中有标准的方法吗?

我猜你正在尝试格式化电话号码。这个问题已经有几个答案了。这里这里,以及这里 - Cory Klein
不是的,可以是任何字符串。 - Ani
我已经找到了解决方案并更新了答案。 - Ani
4个回答

8

1
这是又一个创意解决方案!干得好。 - Cory Klein
不适用于Android - artem

7
您可以通过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

这意味着整个字符串是一个10位数的字符串,但他在帖子中说“我的代码生成随机字符串,可以是字母、数字和字母数字组合”,这意味着它可能会产生长度为+/-10个字符的字符串,并且不仅限于数字。你的例子可能需要更新以考虑到这一点并更完整地回答问题(尽管我注意到请求有歧义,所以也要注意...) - Ryan J
那么它将是 \\b(\\d{3})(\\d{3})(\\d{4})\\b - Avinash Raj

0

哇!regex101真是太棒了!顺便说一句,那可能对OP不起作用,因为它也接受字母字符。 - Cory Klein
@CoryKlein OP说随机生成的字符串可以是字母数字等。 - vks
是的,这很模糊。他的例子给出了一个严格的数字字符串,所以我假设他只想将该模式应用于数字字符串。(耸肩)无论怎样。 - Cory Klein
1
@Ani 我的回答仍然有效。在Java中,没有标准的方法来做到这一点。有些方法可行,有些则不行。有优雅的方式和丑陋的方式。 - Cory Klein
@CoryKlein 请检查我的答案。 - Ani

0

回答您的问题:

没有

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接