Preencher string com zeros a esquerda – java string

Pergunta:


Estou fazendo um trabalho de Sistemas Operacionais e precisando transformar números decimais em binários. Até ai tudo bem, pois o método abaixo recebe um inteiro e converte para binário. Meu problema é o seguinte:

Quando coloco, por exemplo (inteiro 1), ele me retorna corretamente 1. Mas tenho um valor armazenado que seria a quantidade de dígitos, por exemplo (qtd = 4). Eu gostaria que a string aparecesse desta forma: 0001 com quatro dígitos.

Teria como neste método realizar este procedimento, independente do valor da variável quantidade de dígitos?

public String converteDecimalParaBinario(int valor) {
   int resto = -1;
   StringBuilder sb = new StringBuilder();

   if (valor == 0) {
      return "0";
   }

   // enquanto o resultado da divisão por 2 for maior que 0 adiciona o resto ao início da String de retorno
   while (valor > 0) {
      resto = valor % 2;
      valor = valor / 2;
      sb.insert(0, resto);
   }

   return sb.toString();
} 

Autor da pergunta Rodrigo Segatto

Joannis

Cara não testei mas isso deve funcionar!

public String converteDecimalParaBinario(int valor) {
   int resto = -1;
   StringBuilder sb = new StringBuilder();
   int len=0;   

   if (valor == 0) {
      return "0000";
   }

   // enquanto o resultado da divisão por 2 for maior que 0 adiciona o resto ao início da String de retorno
   while (valor > 0) {
      resto = valor % 2;
      valor = valor / 2;
      sb.insert(0, resto);
   }
   len = sd.length();
   while(len<4){
       sd="0"+sd;
       len++;
   }
   return sb.toString();
} 

O que eu fiz:

Iniciei uma variável do tipo int chamada lene atribui o tamanho do sd para len com o comando len = sd.length();.
Se len for menor que 4 adiciona 0 a esquerda, repete até len ser igual a 4.
retorna sd.

Você pode usar a classe DecimalFormat para formatar seu valor de saída. Assim:

    //coloque isso no final do seu método converteDecimalParaBinario
    DecimalFormat df = new DecimalFormat("0000");
    return df.format(Integer.parseInt(sb.toString()));

Você diz no enunciado que possui uma variável qtd que indica a quantidade de dígitos que deve possuir a saída, portanto, a construção do seu objeto de DecimalFormat deve ser variável de acordo com essa quantidade. Para fazer essa quantidade variável de digitos, você pode fazer um for e construir seu pattern. Exemplo:

    int qtd = 5;
    StringBuilder pattern = new StringBuilder();
    for(int i=0; i<qtd; i++) {
        pattern.append("0");
    }
    DecimalFormat df = new DecimalFormat(pattern.toString());

Caso não faça parte do seu trabalho converter o número para binário também pode usar o método toBinaryString() da classe Integer para fazer a conversão para você. Exemplo:

import java.text.DecimalFormat;
public class Bin {
    public static void main(String[] args) {
        System.out.println(converteDecimalParaBinario(4));
    }
    public static String converteDecimalParaBinario(int valor) {
        int qtd = 5;
        StringBuilder pattern = new StringBuilder();
        for(int i=0; i<qtd; i++) {
            pattern.append("0");
        }
        DecimalFormat df = new DecimalFormat(pattern.toString());
        return df.format(Integer.parseInt(Integer.toBinaryString(valor)));
    } 
}

Saída:

00100

Para trocar a quantidade de dígitos que a saída terá, basta alterar o valor da variável qtd.

Podes realizar da seguinte forma se for uma string:

String str = "123";
String formatted = ("0000" + str).substring(str.length());

Nota: Meter um zero por cada digito pretendido, ou seja, 4 dígitos que mencionas na pergunta carecem 4 zeros.

Ou se for numero:

Int number = 123;
String formatted = String.format("%04d", number);

Nota: $04d é para quadro dígitos, $05d é para 5 dígitos, etc…

De qualquer maneira, a segunda opção é sempre melhor: ter a variável com o tipo correto e formatar da forma pretendida o número fazendo uso do método format.


Para o teu caso em particular, poderias fazer da seguinte forma na altura de devolver o valor:

String formatado = String.format("%04d", Integer.parseInt(sb.toString()));
return formatado;

Exemplo

/* package superBuBu; */

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {

        int valor = 1;
        int resto = -1;

        StringBuilder sb = new StringBuilder();

        if (valor == 0) {
            System.out.println("0");
        }

        // enquanto o resultado da divisão por 2 for maior que 0 adiciona o resto ao início da String de retorno
        while (valor > 0) {
            resto = valor % 2;
            valor = valor / 2;
            sb.insert(0, resto);
        }

        String formatado = String.format("%04d", Integer.parseInt(sb.toString()));

        System.out.println(formatado);
    }
}

Exemplo a funcionar no Ideone.

Fonte

Related Posts:

Qual a diferença entre AppCompatActivity e Activity? – android android-activity
Pergunta: Qual a diferença da AppCompatActivity para Activity ? A partir de qual versão a AppCompatActivity foi adicionada ao Android? Autor da pergunta Luhhh A diferença reside ...
Como abreviar palavras em PHP? – php string
Pergunta: Possuo informações comuns como nome de pessoas e endereços, e preciso que elas contenham no máximo 30 caracteres sem cortar palavras. Exemplo: 'Avenida Natalino João Brescansin' ...
Qual é a finalidade de um parêntese vazio numa declaração Lambda? – c# expressões-lambda característica-linguagem
Pergunta: Criei um exemplo de uma declaração Lambda sem argumentos, entretanto, estou com duvidas referente a omissão do parêntese vazio () na declaração. Veja o exemplo: class ...
Boas práticas para URI em API RESTful – api rest restful
Pergunta: Estou com dúvida em relação às URIs de alguns recursos da api que estou desenvolvendo. Tenho os recursos projetos e atividades com relação 1-N, ...
Dúvidas sobre a integração do MySQL com Java – java mysql netbeans
Pergunta: Estou criando um sistema no NetBeans, utilizando a linguagem Java e o banco de dados MySQL. Escrevi o seguinte código para realizar a conexão ...
Qual é a finalidade da pasta Model do framework Inphinit? – php inphinit
Pergunta: No Inphinit micro-framework existe a pasta Model que fica dentro da pasta application, e nela é onde ficam as classes, mas eu estou muito ...
Uso do ‘@’ em variáveis – javascript typescript coffeescript
Pergunta: Vejo em algumas linguagens que compilam para javascript, como TypeScript e CoffeeScript, o uso do @ em variáveis, como também, casos em que o ...
Qual tamanho máximo um arquivo JSON pode ter? – json arquivo
Pergunta: Vou dar um exemplo para conseguir explicar minha duvida: Preciso recuperar informação de imagens vindas de uma API, esse banco de imagens me retorna JSON's ...
O que é Teste de Regressão? – terminologia engenharia-de-software testes
Pergunta: Na matéria de Teste de Software o professor abordou um termo chamado Teste de Regressão, isto dentro da disciplina de teste de software. Sendo ...
O que é um construtor da linguagem? – php característica-linguagem
Pergunta: Em PHP, já li e ouvi várias vezes a respeito dos Construtores da Linguagem. Os casos que sempre ouvi falar deles foi em casos ...
Função intrínseca para converter numérico para string – cobol
Pergunta: Estou a tentar saber se existe alguma função intrínseca do COBOL para converter um data numérico para string sem precisar usar a cláusula REDEFINES: ( ...
Porque usar implements? – java android
Pergunta: Qual a diferença entre usar btn.setOnClickListener(new OnClickListener() { e public class MainActivity extends Activity implements OnClickListener{ Estive fazendo um curso de Android e meu professor falou que ...
O que é XHTML e quando deve ser usado? – html xml xhtml
Pergunta: O que eu sei é que o XHTML precisa ser XML válido. Isso implica, por exemplo, que todas as tags precisam ser fechadas. Por ...
Uma placa aceleradora de vídeo pode melhorar o desempenho não-gráfico? [fechada] – desempenho
Pergunta: Para desenvolver em Ruby on Rails, eu utilizo aqui uma máquina virtual do VirtualBox com Ubuntu Server 14.04 sem interface gráfica instalada. Recentemente descobri uma ...
Concat() VS Union() – c# .net
Pergunta: Qual a diferença entre Concat() e Union() ? Quando usar Concat() e quando usar Union() ? Somente pode ser usado em list ? ...

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *