Gerar Sequencial a partir de um existente

Olá!
Preciso de ajuda.
O usuário irá entrar com os números inicial e final, e o sistema deverá gerar os sequenciais desses números.
Por exemplo: Número inicial: @964987484 300217684008 e Número final: @964987484 300217684015
Qual o método para gerar esses sequenciais longos e que reconheça o arrouba?

Desde já agradeço

Esse espaço em branco no meio do número é parte da entrada do usuário?
Esse número do prefixo será sempre o mesmo?

Se for sempre o mesmo, você pode iterar entre a segunda parte do número usando o tipo long.

Senao, você pode ignorar o arroba, e usar o tipo BigInteger

O espaço em branco faz parte da entrada
Esse número do prefixo será sempre o mesmo? Sim só mudará os finais
O arrouba sempre terá que aparecer no inicio do numero de serie.

Seria apresentado:

@964987484 300217684008
@964987484 300217684009
@964987484 300217684010
@964987484 300217684011

@964987484 300217684015

Isso que você precisa?

Array inicio = split("@964987484 300217684008", " ");
Array final = split("@964987484 300217684015"), " ");

numero valorIni = inicio[1]; //300217684008
numero valorFim = final[1]; //300217684015

string resultado;

while(valorIni <= 300217684015){
    resultado = inicio[0] + " " + valorIni; //@964987484 valorIni
    imprime(resultado);
    valorIni++;
}

Obrigada, Luan.
Vou testar aqui.

O usuário que entrará com os valores inicial e final, portanto não serão esses mesmos valores, somente a quantidade de caracter que é no total de 23.

Eu criaria uma classe Intervalo com os atributos inicio e fim e uma classe Sequencial que recebe um objeto Intervalo como parâmetro e tenha um método proximoNumero().

2 curtidas

Não entendi muito bem.

Luan, não deu certo.

numero valorIni = (numero) "@964987484 300217684008".replace("@", "").replace(" ", ""); //964987484300217684008
numero valorFim = (numero) "@964987484 300217684015".replace("@", "").replace(" ", ""); //964987484300217684015

while(valorIni <= valorFim){
    imprime(valorIni);
    valorIni++;
}

A formatação do @ e do espaço você faz ai onde preferir.
Isso resolve chefe???

Já aprendeu POO?

tô aprendendo

1 curtida

Veja esta classe:

import java.math.BigInteger;

public class Sequencia {

    private final BigInteger inicio;
    private final BigInteger fim;

    private BigInteger atual;

    public Sequencia(String inicio, String fim) {
        this.inicio = converterParaNumero("inicio", inicio);
        this.fim = converterParaNumero("fim", fim);
        this.atual = this.inicio;
    }

    public boolean temProximo() {
        return atual.compareTo(fim) < 0;
    }

    public String proximo() {
        if (temProximo()) {
            atual = atual.add(BigInteger.ONE);
        }
        return atual();

    }

    public String atual() {
        return formatar(atual);
    }

    private static String formatar(BigInteger numero) {
        StringBuilder texto = new StringBuilder(numero.toString());
        while (texto.length() < 21) {
            texto.insert(0, '0');
        }
        texto.insert(9, ' ');
        texto.insert(0, '@');
        return texto.toString();
    }

    private static BigInteger converterParaNumero(String nome, String texto) {
        if (texto == null) {
            throw new IllegalArgumentException("Parâmetro " + nome + " não pode ser null");
        }
        if (texto.length() != 23) {
            throw new IllegalArgumentException("Parâmetro " + nome + " precisa ter 23 caracteres");
        }
        if (!texto.matches("@\\d{9} \\d{12}")) {
            throw new IllegalArgumentException("Parâmetro " + nome + " precisa começar com '@' seguido de 9 dígitos mais um espaço em brancho seguido de 12 dígitos.");
        }
        String numero = texto.substring(1, 10) + texto.substring(11, 23);
        return new BigInteger(numero);
    }
}

Exemplo de uso:

String inicio = "@964987484 300217684008";
String fim =    "@964987484 300217684015";
Sequencia sequencia = new Sequencia(inicio, fim);

System.out.println(sequencia.atual());
while (sequencia.temProximo()) {
    System.out.println(sequencia.proximo());
}
1 curtida

Olá!
Analisando o numero de serie “@964987484 300217684008” para gerar os sequenciais. Vi que o sequenciais são gerados nos primeiros nove números.
os demais são fixos.
Então: "@964987484 300217684008"
vou precisar gerar os sequenciais desses numeros: 964987484
Depois pegar cada sequencial gerado e concatenar com o “@” e os segundos grupos de numeros: “300217684008”.
Para gerar os sequenciais fiz algo que com mais experiência dá pra melhorar.

      String teste = (jtxtNsInicio.getText());        
        String[] vetor = teste.split(" ");        
        String aqui = vetor[0]; //lê o @ 
        String ali = vetor[1]; //lê os números           

//Esse segundo é para quebrar o valor fim
String teste2 = (jtxtNSFim.getText());
String[] String = teste2.split(" "); //Aqui testa o
valor fim
String valfim = String[0]; //Lê o @
String num = String[1]; //

    for (String nome : vetor) {      
        aqui = aqui.replace( "@" , ""); //tira arrouba do numero de serie inicial
        valfim = valfim.replace("@" , ""); //tira arrouba do numero de serie final
        System.out.println(nome);
        System.out.println("Peimeiros numeros: " + aqui); //Os numeros sem o "@"                                                  
         
          int numero = Integer.parseInt(aqui); //inicial
          int valfim1 = Integer.parseInt(valfim); //final
                
          for (int i = numero; i<=valfim1; i++ ){                              
            StringBuilder numeroDeSerie = new StringBuilder();                
            String valor;                
         //   valor = String.valueOf(i);
        //    numeroDeSerie.append(valor);               
            numeroDeSerie.append(i);
       //     numeroDeSerie.append(String.valueOf(i)); //Aqui gera o número sequencial                
          //  System.out.println("Sequencial: " + aqui);
            System.out.println("NS " + numeroDeSerie);
            
        }
          
      }
     return false;
  }