Proteger uma string com zeros ou espaços em Java

Proteger uma string com zeros ou espaços em Java

1. Visão geral

Neste breve tutorial, veremos como preencher umString em Java. Vamos nos concentrar principalmente em um bloco esquerdo, o que significa que vamos adicionar os espaços ou zeros iniciais a ele até atingir o comprimento desejado.

A abordagem para osString preenchidos à direita é muito semelhante, então vamos apenas apontar as diferenças.

2. Preencher aString usando métodos personalizados

A classeString em Java não fornece um método conveniente para preenchimento, então vamos criar vários métodos por conta própria. Primeiro, porém, vamos definir algumas expectativas:

assertEquals("    123456", padLeftZeros("123456", 10));
assertEquals("0000123456", padLeftZeros("123456", 10));

2.1. UsandoStringBuilder

Podemos conseguir isso comStringBuildere alguma lógica procedimental:

public String padLeftZeros(String inputString, int length) {
    if (inputString.length() >= length) {
        return inputString;
    }
    StringBuilder sb = new StringBuilder();
    while (sb.length() < length - inputString.length()) {
        sb.append('0');
    }
    sb.append(inputString);

    return sb.toString();
}

Podemos ver aqui que se o comprimento do texto original for igual ou maior que o comprimento desejado, retornamos a versão inalterada dele. Caso contrário, criamos um novoString,  começando com os espaços e adicionando o original.

Claro, se quiséssemos pad com um caractere diferente, podemos apenas usá-lo em vez de um0.

Da mesma forma, se quisermos preencher direito, precisamos apenas fazernewStringBuilder(inputString) e adicionar os espaços no final.

2.2. Usandosubstring

Outra maneira de fazer o preenchimento à esquerda écreate a String with the desired length that contains only pad characters and then use the substring() method:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
    sb.append(' ');
}

return sb.substring(inputString.length()) + inputString;

2.3. UsandoString.format

E, finalmente, desde o Java 5, podemos usarString.format():

return String.format("%1$" + length + "s", inputString).replace(' ', '0');

Devemos notar que, por padrão, a operação de preenchimento será realizada usando espaços. Essa é a razão pela qual precisamos usar o métodoreplace() se quisermos preencher com zeros ou qualquer outro caractere.

Para o pad certo, só precisamos usar um sinalizador diferente:%1$-

3. Pad aString usando bibliotecas

E há bibliotecas externas que já oferecem funcionalidades de preenchimento.

3.1. Apache Commons Lang

O Apache Commons Lang fornece um pacote de classes de utilitários Java. Um dos mais populares é oStringUtils.

Para usá-lo, precisaremos incluí-lo em nosso projeto adicionandoits dependency ao nosso arquivopom.xml:


    org.apache.commons
    commons-lang3
    3.8.1

And then we pass the inputString and the length, just like the methods we created. Também podemos passar o caractere de preenchimento:

assertEquals("    123456", StringUtils.leftPad("123456", 10));
assertEquals("0000123456", StringUtils.leftPad("123456", 10, "0"));

Novamente, oString será preenchido com espaços por padrão ou precisamos definir explicitamente outro caractere de preenchimento.

Existem também métodosrightPad() correspondentes.

To explore more features of the Apache Commons Lang 3, you can check out our introductory tutorial. Se você gostaria de verother ways of the String manipulation using the StringUtils class, please refer to this article.

3.2. Google Guava

Outra biblioteca que podemos usar é aGuava do Google. Claro, primeiro precisamos adicioná-lo ao projeto adicionandoits dependency:


    com.google.guava
    guava
    27.0-jre

And then use the Strings class:

assertEquals("    123456", Strings.padStart("123456", 10, ' '));
assertEquals("0000123456", Strings.padStart("123456", 10, '0'));

Não há caractere de pad padrão neste método, portanto, precisamos passá-lo todas as vezes.

Para o teclado direito, podemos usar o métodopadEnd().

The Guava library offers much more features and we have covered a lot of them. You can look here for the Guava related articles.

4. Conclusão

Neste artigo rápido, ilustramos como podemos preencher aString em Java. Apresentamos exemplos usando nossas próprias implementações ou bibliotecas existentes.

Como de costume, um código-fonte completo pode ser encontradoover on GitHub.