Метод, который конкатенирует строки, некоторые из которых могут быть null, с различными разделителями


Я хочу, чтобы рефакторинг метода Java я создал, сделав его чище и красивее. Метод сцепляет несколько строк, который может быть пустым или нет. Я новичок в Java, поэтому я не уверен, как это сделать, тем более, что между строк я, возможно, сепараторы.

Вот мой способ:

private String createString(String modeloVotacao, String tipoProposicao, String ordemNumero, String ordemAno) {       

    String modeloDescricao = "";
    if(modeloVotacao != null) {
        modeloDescricao = modeloVotacao + " - ";
    }

    if(tipoProposicao != null) {
        modeloDescricao += tipoProposicao + " ";
    }
    modeloDescricao += ordemNumero != null?ordemNumero:"";

    if(ordemNumero != null && ordemAno != null) {
        modeloDescricao += "/"+ordemAno;
    } else {
        if(ordemAno != null) {
            modeloDescricao += ordemAno;
        }
    }

    return modeloDescricao;
}

Вот некоторые результаты, этот метод возвращает:

  • Все заполнено: 1ª DISCUSSÃO - проект де лей COMPLEMENTAR кол / 16/2018
  • modeloVotacao = нуль: проект Кол / де COMPLEMENTAR леев 16/2018
  • tipoProposicao = нуль: 1ª DISCUSSÃO - кол-16/2018
  • ordemNumero = нуль: 1ª DISCUSSÃO - проект де лей COMPLEMENTAR 2018
  • ordemAno = нуль: 1ª DISCUSSÃO - проект де лей COMPLEMENTAR кол / 16
  • все нуль: пустая строка
  • modeloVotacao и tipoProposicao = нуль: кол / 16/2018
  • ordemNumero и ordemAno = нуль: 1ª DISCUSSÃO - ПРОЖЕТО де лей COMPLEMENTAR


116
2
задан 26 января 2018 в 04:01 Источник Поделиться
Комментарии
1 ответ

Повторное задача здесь заключается в том, что вы хотите условно вставить разделитель между двумя строками, если и не равны null. Итак, написать вспомогательную функцию, которая делает это:

private static String join(String a, String sep, String b) {
return (a == null) ? b :
(b == null) ? a : a + sep + b;
}

Тогда код будет простой:

private String createString(String modeloVotacao, String tipoProposicao, String ordemNumero, String ordemAno) {       
String description = join(modeloVotacao, " - ",
join(tipoProposicao, " ",
join(ordemNumero, "/", ordemAno)));
return (description == null) ? "" : description;
}

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

Пожалуйста, во избежание смешивания португальском языке с английскими идентификаторами (например, createString()). Придерживаться одной или другой (желательно на английском).

1
ответ дан 26 января 2018 в 07:01 Источник Поделиться