Есть ли более лаконичный / элегантный способ форматировать следующий номер социального страхования, например String, с Groovy или без него? - PullRequest
5 голосов
/ 21 марта 2012

ДО:

EUTQQGOPED

ПОСЛЕ:

EUT-QQG-OPED

Пример ниже - это то, что я придумал, чтобы добавить «-» к 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
}

Ответы [ 5 ]

7 голосов
/ 21 марта 2012

Я думаю, что вы сделали это лучший способ сделать это, однако вы можете сделать его более элегантным, просто вставив все, как показано ниже:

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

Этот тип встраивания возможен благодаря StringBuilder, обеспечивающему плавный интерфейс (который позволяет связывать метод).

Также обратите внимание на транспонирование вставок, поскольку порядок их размещения означает, что первая вставка влияет на параметры второй вставки. Упорядочив их по величине, сначала они означают, что они в основном независимы друг от друга.

И всегда есть ... "меньше кода == хорошо" (до тех пор, пока оно все еще читаемо, и в этом случае это ИМХО больше читаемо)

5 голосов
/ 21 марта 2012

Можно использовать регулярные выражения, немного понятнее, что вы делаете, но, вероятно, не так эффективно.

String formattedPin = pin.replaceAll("(.{3})(.{3})(.{4})", "$1-$2-$3")
System.out.println(formattedPin);
3 голосов
/ 21 марта 2012

Для простоты я бы сказал:

def pin = "EUTQQGOPED"
def formatted = [pin[0..2], pin[3..5], pin[6..-1]].join('-')

Для краткости, это может быть хаком, но он очень короткий (и я думаю, что он слишком читабелен),

def formatted = "-$pin"[1..3, 0, 4..6, 0, 7..10]
2 голосов
/ 21 марта 2012

Хотя мне нравится опция String.format , я думаю, что ее разрыв выглядит ужаснее.

    String pin = "EUTQQGOPED";
    System.out.println(String.format("%s-%s-%s", pin.substring(0, 3), pin.substring(3,6), pin.substring(6)));
2 голосов
/ 21 марта 2012

Это пара опций, которые Groovy дает вам.Они не обязательно читают очень легко в этом случае, но они хороши и коротки.

    def pin = "EUTQQGOPED"

    // Option 1
    def formatted1 = "${pin[0..2]}-${pin[3..5]}-${pin[6..-1]}" 
    println formatted1

    // Option 2
    def pt1 = pin[0..2]
    def pt2 = pin[3..5]
    def pt3 = pin[6..-1]

    def formatted2 = pt1 << "-" << pt2 << "-" << pt3
    println formatted2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...