是否有更简洁/优雅的方式来格式化以下社会安全号码,如有或没有Groovy的字符串?

Bri*_*ian 5 java groovy

之前:

EUTQQGOPED
Run Code Online (Sandbox Code Playgroud)

后:

EUT-QQG-OPED
Run Code Online (Sandbox Code Playgroud)

下面的示例是我想出的将" - "添加到10个字符的字符串作为可读性要求的一部分.格式化模式类似于美国社会安全号码的格式.

有没有更简单,更简洁的方式来完成额外的格式?

public static void main(String[] args){
        String pin = "EUTQQGOPED";
        StringBuilder formattedPIN = new StringBuilder(pin);
        formattedPIN = formattedPIN.insert(3, '-').insert(7, '-');
        //output is EUT-QQG-OPED
        println formattedPIN
}
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 7

我认为你所做的是最好的方法,但你可以通过简单地插入所有东西来使它变得更优雅,如下所示:

public static void main(String[] args) {
    println new StringBuilder("EUTQQGOPED").insert(6, '-').insert(3, '-');
}
Run Code Online (Sandbox Code Playgroud)

由于StringBuilder提供了流畅的界面(允许方法链接),因此可以使用这种内嵌.

还要注意插入的转置,因为您使用它们的顺序意味着第一个插入会影响第二个插入的参数.通过命令它们最大的第一意味着它们基本上彼此独立.

并且总是...... "代码少= =好"(只要它仍然可读,在这种情况下它是恕我直言可读)

  • 更可读的代码==良好(如果更少或更多则无关紧要).:) (3认同)

Ada*_*dam 5

可以使用正则表达式,它更清楚你正在做什么,但问题不是那么有效.

String formattedPin = pin.replaceAll("(.{3})(.{3})(.{4})", "$1-$2-$3")
System.out.println(formattedPin);
Run Code Online (Sandbox Code Playgroud)