[Resolvido] = erro = java.lang.NumberFormatException: For input string: ""

Bom dia !!!

Pessoal preciso da ajuda de vocês

Estou fazendo uma classe para converter a formatação numerica de 44 caracteres para codigo de barras

porem esta dando o seguinte erro java.lang.NumberFormatException: For input string: “”

na linha onde se enconta o seguinte Codigo numy = Integer.parseInt(sCodigoNumerico.substring(l, 1)) - 1;

bom sei que o problema parece obvio que não se pode coverter String vazia , porem se coloco para imprimir para mim parece que está correto

Bom segue a classe Abaixo se alguem poder me ajudar fico grato

 /**
  Metodo para, Conveter Caracter para Codigo de Barras                       <p>
  1 Argumentos                                                               <p>
  1º do tipo String                                                          <p>
  Exemplo de Uso = Util.CodigoDeBarras("43795764000012345600023456789789432567342567");                              <p>
 */
        public String CodigoDeBarras(String sCodigoNumerico)
        {
            //limpa o campo 1º
            //sCodigoNumerico = this.StrTran(sCodigoNumerico,"#");

            //transforma o código de barras em caracteres interpretáveis pelo VIPP
            int i, l, wktam, tamanho, x, y, numx, numy;
            String codbarra, compxerox, compxerox1, compxerox2, binxer;
            String[] codxerox = new String[10];
            
            codxerox[0] = "10001";
            codxerox[1] = "01001";
            codxerox[2] = "11000";
            codxerox[3] = "00101";
            codxerox[4] = "10100";
            codxerox[5] = "01100";
            codxerox[6] = "00011";
            codxerox[7] = "10010";
            codxerox[8] = "01010";
            codxerox[9] = "00110";

            sCodigoNumerico = sCodigoNumerico.trim();
            tamanho = sCodigoNumerico.length();
            wktam = tamanho % 2;
            
            if (wktam != 0){
               return "1";
            }

            codbarra = "<";
            l = -1;

            for (i = 1; i <= tamanho/2; i++){
                l++;
                
                System.out.println("1 Contado "+l);
                System.out.println("1 Dados   "+sCodigoNumerico.substring(l, 1));
                
                numx = Integer.parseInt(sCodigoNumerico.substring(l, 1)) - 1;

                System.out.println("1 numx    "+numx);

                if (numx == -1){
                   numx = 9;
                }

                System.out.println("2 Contado "+l);
                System.out.println("2 Dados   "+sCodigoNumerico.substring(l, 1));
                
                l++;
                numy = Integer.parseInt(sCodigoNumerico.substring(l, 1)) - 1;

                System.out.println("2 numx    "+numy);


                if (numy == -1){
                   numy = 9;
                }

                compxerox1 = codxerox[numx];
                compxerox2 = codxerox[numy];
                
                compxerox = compxerox1.substring(0, 1);
                compxerox += compxerox2.substring(0, 1);
                compxerox += compxerox1.substring(1, 1);
                compxerox += compxerox2.substring(1, 1);
                compxerox += compxerox1.substring(2, 1);
                compxerox += compxerox2.substring(2, 1);
                compxerox += compxerox1.substring(3, 1);
                compxerox += compxerox2.substring(3, 1);
                compxerox += compxerox1.substring(4, 1);
                compxerox += compxerox2.substring(4, 1);
                
                y = 0;
                for (x = 1; x <= 5; x++){
                    binxer = compxerox.substring(y, 2);
                    
                    if (binxer.equals("01")){
                        codbarra+= "N";
                    }else if(binxer.equals("11")){
                        codbarra += "W";
                    }else if (binxer.equals("00")){
                        codbarra += "n";
                    }else if (binxer.equals("10")){
                        codbarra += "w";
                    }

                    y += 2;

                }//for
            }//for
            
            codbarra += ">";
            return codbarra;
        }

Bom dia.

Se eu entendi bem o que você disse, funciona ao imprimir porque você não está fazendo conversão de String para int.
E no parseInt recebendo os valores 1 e 1, como é caso, trará uma string vazia mesmo e sempre dará uma exceção do tipo NumberFormatException.
Uma sugestão seria você definir um número padrão caso encontrasse uma string vazia durante o loop for.

Dá um retorno de como ficou o código.

[quote=willesreis]Bom dia.

Se eu entendi bem o que você disse, funciona ao imprimir porque você não está fazendo conversão de String para int.
E no parseInt recebendo os valores 1 e 1, como é caso, trará uma string vazia mesmo e sempre dará uma exceção do tipo NumberFormatException.
Uma sugestão seria você definir um número padrão caso encontrasse uma string vazia durante o loop for.

Dá um retorno de como ficou o código.[/quote]

Bom dia , e Obrigado pela atenção

Bom o problema e que não posso dar um numero padrão , por se tratar de codigo de barra cada numero e bem especifico na sua posição

tenho que entender o que está acontecendo mesmo

e quando resolver postarei a solução sim tbm acho importante que os amigos programadores em java desenvolvam se bem na linguagem

att javax

O código de barras poderá chegar inválido (string vazia)?
Caso não puder o input do código está errado deverá dar uma exeption e fazer o processo denovo.

[quote=jeffev]O código de barras poderá chegar inválido (string vazia)?
Caso não puder o input do código está errado deverá dar uma exeption e fazer o processo denovo.[/quote]

Bom Pessoal, o Problema erra no Indice do Substring

Segue o Codigo Corrigido , Agradeço a ajuda

Att Javax

 /**
  Metodo para, Conveter Caracter para Codigo de Barras                       <p>
  1 Argumentos                                                               <p>
  1º do tipo String                                                          <p>
  Exemplo de Uso = Util.CodigoDeBarras(Barras);                              <p>
 */
   public String CodigoDeBarras(String sCodigoNumerico){
    //limpa o campo 1º
    //sCodigoNumerico = this.StrTran(sCodigoNumerico,"");
 
       //transforma o código de barras em caracteres interpretáveis pelo VIPP
       int i, l, wktam, tamanho, Indice, x, y, numx, numy;
       String codbarra, compxerox, compxerox1, compxerox2, binxer;
       String[] codxerox = new String[10];
            
        codxerox[0] = "10001";
        codxerox[1] = "01001";
        codxerox[2] = "11000";
        codxerox[3] = "00101";
        codxerox[4] = "10100";
        codxerox[5] = "01100";
        codxerox[6] = "00011";
        codxerox[7] = "10010";
        codxerox[8] = "01010";
        codxerox[9] = "00110";

          sCodigoNumerico = sCodigoNumerico.trim();
          tamanho = sCodigoNumerico.length();
           wktam = tamanho % 2;
            
            if (wktam != 0){
               return "1";
            }

            codbarra = "<";
            l = 0;
            for (i = 1; i <= tamanho/2; i++){

             l++;
             numx = Integer.parseInt(sCodigoNumerico.substring(l-1, l));

             if (numx == 0){
               numx = 9;
              }
                
             l++;
             numy = Integer.parseInt(sCodigoNumerico.trim().substring(l-1, l));

             if (numy == 0){
              numy = 9;
             }

                compxerox1  =  codxerox[numx];
                compxerox2  =  codxerox[numy];
                
                compxerox   =  compxerox1.substring(0, 1);
                compxerox  +=  compxerox2.substring(0, 1);
                compxerox  +=  compxerox1.substring(1, 2);
                compxerox  +=  compxerox2.substring(1, 2);
                compxerox  +=  compxerox1.substring(2, 3);
                compxerox  +=  compxerox2.substring(2, 3);
                compxerox  +=  compxerox1.substring(3, 4);
                compxerox  +=  compxerox2.substring(3, 4);
                compxerox  +=  compxerox1.substring(4, 5);
                compxerox  +=  compxerox2.substring(4, 5);
                
                y = 0;
                Indice = 0;
                
                for (x = 1; x <= 5; x++){
    
                    Indice += 2;

                     System.out.println("Indice "+Indice);
                     System.out.println("Codigo "+compxerox);

                    binxer = compxerox.substring(y,Indice);
                    System.out.println("binxer "+binxer);
                    
                    if (binxer.equals("01")){
                        codbarra+= "N";
                    }else if(binxer.equals("11")){
                        codbarra += "W";
                    }else if (binxer.equals("00")){
                        codbarra += "n";
                    }else if (binxer.equals("10")){
                        codbarra += "w";
                    }

                    y += 2;

                }//for
            }//for
            
            codbarra += ">";
            return codbarra;
        }