【问题标题】:java format strings based on a pattern基于模式的java格式字符串
【发布时间】:2014-10-01 16:47:38
【问题描述】:

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

假设其中一个数字字符串是“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 中是否有任何标准方法可以做到这一点?

【问题讨论】:

  • 我假设您正在尝试格式化电话号码。这个问题已经有几个答案了。 Hereherehere
  • 不,我不是。它可以是任何字符串。
  • 我得到了解决方案并更新了答案。

标签: java regex formatting


【解决方案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】:

你可以通过 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 个字符,而不仅仅是数字。您的示例可能会更新以解决此问题并更完整地回答问题(尽管我确实注意到请求的模棱两可,所以就是这样......)
  • 那么它将是\\b(\\d{3})(\\d{3})(\\d{4})\\b
【解决方案3】:
^(.{3})(.{3})(.{4})$

试试这个。这会奏效。查看演示。

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

【讨论】:

  • 哇! regex101 很整洁!作为旁注,这可能不适用于 OP,因为它也接受字母字符。
  • @CoryKlein OP 说生成的随机字符串可以是字母数字等。
  • 是的,它是模棱两可的。他的示例给出了一个严格的数字字符串,所以我假设他只想将该模式应用于数字字符串。 (耸耸肩)随便。
  • @Ani 我的答案仍然成立。不,在 Java 中没有这样做的标准方法。有些方法有效,有些方法无效。有优雅的方式,也有丑陋的方式。
  • @CoryKlein 检查我的答案
【解决方案4】:

回答你的问题:

没有

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

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

【讨论】:

    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多