Concatenar Strings e usar substring()

6 respostas
P

Pessoal tenho duas Strings que vem nesse formato:
0038
25

Preciso que elas sejam apresentadas da seguinte forma: 003,825.
Então tentei fazer o seguinte:

System.out.println(peso1.substring(0, 3) + "," + peso1.substring(3, 4) + peso2);

Só que isso me retorna o seguinte erro:

StringIndexOutOfBoundsException: String index out of range: 3

Será que estou usando o substring errado?

6 Respostas

cassio

Amigo, usei o código q vc postou, fiz isso

public class Teste {
	public static void main(String args[]) {
		String peso1 = "0038";
		String peso2 = "25";
		
		System.out.println(peso1.substring(0, 3) + "," + peso1.substring(3, 4) + peso2);
	}
}

E saiu isso:

003,825

Não deu exceção ou erro algum…

P

Cara não sei se isso tem a ver mas o todo do meu ambiente que preciso fazer isso é o seguinte:
Recebo em stream os dados de uma balança e é em cima desses dados que eu preciso dividir e concatenar.
Olha o meu código:

public void serialEvent(SerialPortEvent ev){
switch (ev.getEventType()) {
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
byte[] bufferLeitura = new byte[20];
try {
while ( entrada.available() > 0 ) {
nodeBytes = entrada.read(bufferLeitura);
}
String Dadoslidos = new String(bufferLeitura);
if (bufferLeitura.length == 0) {
System.out.println("Nada lido!");
} else if (bufferLeitura.length == 1 ){
System.out.println("Apenas um byte foi lido!");
} else { 
    String peso1 = " ";
    String peso2 = " ";
    String pesoTotal = " ";
    
    if (teste == true){
         if (Dadoslidos.substring(0, 1).equals("0")){
              System.out.println(Dadoslidos.substring(0, 4));
              peso1 = Dadoslidos.substring(0, 4);
         }
         if (Dadoslidos.substring(3, 7).equals("0000")){
             System.out.println(Dadoslidos.substring(0, 2));
             peso2 = Dadoslidos.substring(0, 2);
             teste = false;
         }
    }
    
    //System.out.println(Dadoslidos);
    if(!peso2.trim().equals("")){
         System.out.println(peso1.substring(0, 2) + "," + peso1.substring(2, 3) + peso2);
    }
    
}
} catch (Exception e) {
    JOptionPane.showMessageDialog(null,
                    "Erro durante leitura! STATUS: " + e,
                    "Erro!",
                    JOptionPane.ERROR_MESSAGE);
//System.out.println("Erro durante a leitura: " + e );
}
//System.out.println("n.o de bytes lidos : " + nodeBytes );
break;
}
}

Será que o ideal para jogar o valor para as variáveis é montar um método set e para resgatar um método get? Será que isso tem a ver?

P

Para complementar a minha dúvida :?:
Fiz os métodos get e set para as variáveis da seguinte forma:

public String setTextPeso1(String peso1){
    this.peso1 = peso1;
    return peso1;
}

public String setTextPeso2(String peso2){
    this.peso2 = peso2;
    return peso2;
}

public String getTextPeso1(){
    return peso1;
}

public String getTextPeso2(){
    return peso2;
}

Agora quando tento executar a minha rotina com esse código:

if (validaPeso == true){
         if (Dadoslidos.substring(0, 1).equals("0")){
              System.out.println(Dadoslidos.substring(0, 4));
              setTextPeso1(Dadoslidos.substring(0, 4));
         }
         if (Dadoslidos.substring(3, 7).equals("0000")){
             System.out.println(Dadoslidos.substring(0, 2));
             setTextPeso2(Dadoslidos.substring(0, 2));
             validaPeso = false;
         }
    }
    
    //System.out.println(Dadoslidos);
    if(!peso2.trim().equals("")){
         System.out.println(getTextPeso1().substring(0, 2) + "," + getTextPeso1().substring(2, 3) +
                 getTextPeso2());
    }

Ocorre o erro de NullPointerException. Isso é mesmo erro de que as variáves estão sem valor?

cassio

Vc teria q debugar melhor seu código, ams acho que é porque as variáveis não estão inicializadas sim… Põe alguns blocos try/catch ou verifique no trace da exceção gerada onde exatamente no seu código a exceção está sendo gerada…
Tente também exibir toda essa sua variável bufferLeitura usando um laço, pra ver se realmente tem algo dentro dela… Mesma coisa pro Dadoslidos

Falou!

J

Só uma curiosidade, mas por que seu método set tem o return se o método get já tem isso?

O comum é:

public void setTextPeso1(String peso1){
     this.peso1 = peso1;
}

E então usar os métodos get pra retornar o conteúdo dos atributos.

Coloca um try/catch e no catch coloca um printStackTrace() pra ver em que linha está dando o erro.

P

Valeu pessoal, ajeitei os métodos e agora tá funcionando legal.

Criado 13 de julho de 2006
Ultima resposta 13 de jul. de 2006
Respostas 6
Participantes 3