Aqui está a String, por exemplo:
"Apple"
e gostaria de adicionar zero para preencher 8 caracteres:
"000Apple"
Como posso fazer isso?
java
string
formatting
format
Roy
fonte
fonte
("0000" + theString).substring(theString.length())
é mais realista. Isso apagatheString
com zeros à esquerda. Desculpe não poderia resistir adicionar este comentário :)StringBuilder
ae é necessário um loop para preenchê-lo. Se o requisito é realmente apenas truncar seqüências de caracteres de 8 caracteres, tudo bem, embora seja um caso de uso muito restrito, mas essa solução nunca pode ser chamada rapidamente. É apenas curto.fonte
%07s
vez de%07d
, você receberá umFormatFlagsConversionMismatchException
. você pode experimentá-lo.Isto é de commons-lang . Veja javadoc
fonte
Isto é o que ele estava realmente pedindo, acredito:
resultado:
fonte
DuplicateFormatFlagsException
(devido00
à sequência de caracteres no formato). Se você substituir uma sequência com mais de 8 caracteres, isso gera umIllegalFormatFlagsException
(por causa do número negativo).String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(0,8);
. Agora você não terá essa exceção.String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(0,8);
está errado, deveria serString.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(1,9);
.Você pode usar o método String.format conforme usado em outra resposta para gerar uma sequência de 0,
Isso pode ser aplicado ao seu problema ajustando dinamicamente o número de 0s iniciais em uma sequência de formato:
Ainda é uma solução confusa, mas tem a vantagem de poder especificar o comprimento total da sequência resultante usando um argumento inteiro.
fonte
Usando a
Strings
classe de utilitário do Guava :fonte
Você pode usar isto:
fonte
Eu já estive em uma situação semelhante e usei isso; É bastante conciso e você não precisa lidar com o comprimento ou outra biblioteca.
Simples e arrumado. O formato da string retorna
" Apple"
e, após substituir o espaço por zeros, fornece o resultado desejado.fonte
fonte
Use o Apache Commons StringUtils.leftPad (ou veja o código para criar sua própria função).
fonte
fonte
Você pode precisar cuidar do edgecase. Este é um método genérico.
fonte
fonte
fonte
Em Java:
Em Scala:
Você também pode explorar uma maneira no Java 8 de fazê-lo usando fluxos e reduções (semelhante à maneira que eu fiz com o Scala). É um pouco diferente de todas as outras soluções e eu particularmente gosto muito.
fonte
Isso é rápido e funciona para qualquer tamanho.
fonte
Pode ser mais rápido do que Chris Lercher responde quando a maioria das String tem exatamente 8 caracteres
no meu caso na minha máquina 1/8 mais rápido.
fonte
Aqui está a versão simples "script legível" sem API que eu uso para preencher previamente uma string. (Simples, legível e ajustável).
fonte
Alguém tentou esta solução Java pura (sem SpringUtils):
Infelizmente, esta solução funciona apenas se você não tiver espaços em branco em uma string.
fonte
Se você deseja escrever o programa em Java puro, siga o método abaixo ou existem muitos String Utils para ajudá-lo melhor com os recursos mais avançados.
Usando um método estático simples, você pode conseguir isso como abaixo.
Você pode usar o método acima
addLeadingText(length, padding text, your text)
A produção seria 000Apple
fonte
Não é bonito, mas funciona. Se você tiver acesso ao apache commons, sugiro que use esse
fonte