String java

tenho a string com o conteudo Frete por conta: Sem Frete Frete: 0,00
quer pegar somente o valor do Frete:

o problema é que nao sei a posicao do Frete: porque nesse exemplo esta sem frete, mas acopntece que a string pode ser assim
Frete por conta: Teste Frete: 10,00
Frete por conta: fabio Frete: 30,00
Frete por conta: comerciante Frete: 5,10

a string muda quero pegar somente o valor como poderia fazer isso ???

da um split nos espaço e pega a 3º posição após o último espaço, que seria o valor

Verificando suas strings, todas sao separadas por ‘:’, logo, voce podera dar um split, e depois um replace nos espacos em brancos. No array, ja com os valores tratados, a ultima posicao sera o do valor =D

poderia me dar um exemplo ???

int tamanho = mensagem.length();
prazo = mensagem.substring(164, tamanho-34);
System.out.print(prazo);

isso aqui eu nao posso fazer, pois nao sei o tamanho da string ela muda…

String frete = "comerciante Frete: 5,00"; //Fazendo split da String String[] fretes = frete.split(" "); System.out.println(fretes[2]);

public class TesteSplit {

	public static void main(String[] args) {
		
		String texto = "Oi, tudo bem ?";
		String textoSplit[] = texto.split(",");
				
		System.out.println(textoSplit[0]);
		System.out.println(textoSplit[1]);
		
	}
	
}

explicando o que eu fiz: dei um split nos espaços da string, se for sempre padrão os espaços, o 2º valor será sempre o valor do frete, sendo assim será jogado na posição 2 do array, caso não for padrão 3 espaços, aí terá que ter um identificador para fazer o split, no caso ali eu vi que além dos espaço tem o ‘:’, se ele for referência e também padrão, poderá ser feito split com ele, aí depende de como você vai padronizar seu código.

na verdade minha string é assim

Vendedor: teste Data: 12/01/2013
Nome: teste CPF/CNPJ: 000.163.000-68
Frete por conta: Sem Frete Frete: 0,00
Pagamento: Prazo Total: 0,00

preciso pegar somente o valor do frete.

a string sempre sai dessa maneira, porem alterando o vendedor, nome cliente, frete o valor do frete e o pagamento prazo a vista cartao

então use split no “:”, ficará assim:

[code]
public class Split {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    String frete = "comerciante Frete: 5,00";
    //Fazendo split da String  
    String[] fretes = frete.split(":");
    System.out.println(fretes[1]);

}

}[/code]

fiz assim e acho que deu certo

String[] fretes = mensagem.split(":");
System.out.println(fretes[8]);

beleza cara funcionou certo fazendo o esquema acima

olha so essa string

Vendedor: teste Data: 12/01/2013
Nome: teste CPF/CNPJ: 000.163.000-68
Frete por conta: Sem Frete Frete: 0,00
Pagamento: Prazo Total: 0,00

fazendo assim pego o valor do frete da string

String[] fretes = mensagem.split(":");
System.out.println(fretes[8]);

agora quero colocar esse valor do frete no lado do Prazo na ultima linha Prazo o valor do frete 0,00 como poderia fazer isso…

[quote=fabiodurgante]fiz assim e acho que deu certo

String[] fretes = mensagem.split(":");
System.out.println(fretes[8]);

beleza cara funcionou certo fazendo o esquema acima

[/quote]

não sei se é pq estou sem meu óculos, mas li o número 8 ali, hehe, cara o 8 seria a posição 8 do array que nesse caso nem existe, para se referenciar ao que vem depois do split use a posição do array, que no caso do valor é a posição 1, pois dissemos ao java: cara quebre a String quando achar o ‘:’, ele achou e armazenou o que veio pela frente depois do split, que é o valor sendo posição 1 (fretes[1]). Isso vai funcionar se toda String que contém o frete utilizar o ‘:’ como referência, padronize, senão vai dar zebra.

a string

Vendedor: teste Data: 12/01/2013
Nome: teste CPF/CNPJ: 000.163.000-68
Frete por conta: Sem Frete Frete: 0,00
Pagamento: Prazo Total: 0,00

String[] fretes = mensagem.split(":");
System.out.println(fretes[6]);

isso é 6 ai ele pego 0,00 Pagamento, agora para pegar isso e colocar na ultima linha depois da palavra Prazo .

cara posta teu código aí que eu to meio confuso, não sei como está organizado essas tuas strings


indice=0;
    File temp1 = new File("C:\\davs\\dav.txt");
        temp1.delete();
 String[] prazo;

      //  davs.removeAll(davs);
      //  jTextArea1.setText("");


        File pasta = new File("C:\\teste\\PDF");
        File arquivos[] = pasta.listFiles();
   File novo = new File("C:\\davs\\dav.pdf");


   if(arquivos.length == 0){
JOptionPane.showMessageDialog(null, "Não Possui DAVS Pendentes");
  return;
   }
       

      for(int i=0; i < arquivos.length; i++) {


            //         System.out.println(cont);
             arquivos[i].renameTo(novo);



        list_all_pdf_areatextfield_botao_navegacao pdf = new list_all_pdf_areatextfield_botao_navegacao();
        pdf.setEnderecoRecurso("C:\\davs\\dav.pdf");

     String retorno = pdf.getConteudo();

        FileWriter x = null;
        try {
            x = new FileWriter("C:\\davs\\davs.txt", false);
            x.write(retorno);
            x.close();
        } catch (IOException ex) {
             System.out.println("erro aqui");
            Logger.getLogger(list_all_pdf_areatextfield_botao_navegacao.class.getName()).log(Level.SEVERE, null, ex);
        }



        String mensagem="";
File file = new File("C:\\davs\\davs.txt");
                try {
                  FileReader reader = new FileReader(file);
                  BufferedReader input = new BufferedReader(reader);
                  String linha;
                  while ((linha = input.readLine()) != null) {
                    //System.out.println(linha);
            //        jTextArea1.append(linha);
              //       jTextArea1.append("\n");
if(linha.contains("Vendedor:")||linha.contains("Nome:")||linha.contains("Pagamento:")||linha.startsWith("001",1)||linha.startsWith("002",1)||linha.contains("Frete") ){
                     mensagem+=linha+"\n ";

                      //System.out.print(mensagem);
                     }

                  }


String[] fretes = mensagem.split(":");       // pega o valor do frete
System.out.println(fretes[6]);
//System.out.println(mensagem);


               davs.add(mensagem);
jTextArea1.append(mensagem+"====================================================== \n");

                } catch (IOException ioe) {

                }
         File temp = new File("C:\\davs\\dav.pdf");
        temp.delete();


        }

isso ai tenho um arquivo PDF ai transformo ele em um TXT leio o txt e coloco no jtextarea1, somente o conteudo que me interresa no arquivo TXT que esta no IF entendeu…

tentei inserir assim


 StringBuffer sb= new StringBuffer(mensagem);
 sb.append(fretes[6]);

porem nao sei exatamente onde vou inserir entendeu, tem que ser nessa string abaixo, na ultima linha depois da palavra Prazo

Vendedor: teste Data: 12/01/2013
Nome: teste CPF/CNPJ: 000.163.000-68
Frete por conta: Sem Frete Frete: 0,00
Pagamento: Prazo Total: 0,00

como posso fazer isso ???

cara ta bagunçado essa tua forma de pegar os dados, ali no leitor linha, joga cada valor dentro de um objeto. Para cada posição do objeto será um valor da linha, assim você pode mostrar na ordem que quiser, e ainda assim estará programando da forma correta.

olha pra inserir o valor depois do prazo

primeiro acho a palavra Prazo ai depois preciso pegar a posicao que esta essa palavra para fazer um append depois da posicao da palavra Prazo, e inserir o valor do frete

como pego a posicao da palavra Prazo no meio da string

 StringBuffer sb= new StringBuffer(mensagem);
 sb.append(fretes[6]);
 
 for(int j=1; j < mensagem.length(); j++){
          if (mensagem.contains("Prazo")){
          

          }
       }

cara só uma dica ao nomear suas variáveis como list_all_pdf_areatextfield_botao_navegacao você esta usando um padrão chamado de Snake case que é o recomendado para ruby evite fazer isso… prefira o Camel case sendo assim o nome ficaria listAllPdfAreatextfield….
Quanto a pegar o valor do frete você pode optar por usar regex acho mais simples e mais eficiente neste tipo de busca.

Ex:

String frete = "Comerciante Frete: 5,00";
Pattern pattern = Pattern.compile("(\b(f)|(F)rete):(\\s)?([0-9]*),([0-9]*)");
Matcher matcher = pattern.matcher(frete);
while (matcher.find()) {
	System.out.println(matcher.group()); // Saída: Frete: 5,00
}

Agora para você pegar a posição da palavra Prazo, isso também pode ser feito via regex
Ex:

String prazo = "Pagamento: Prazo Total: 0,00 ";
Pattern pattern = Pattern.compile("(\b(p)|(P)razo)");
Matcher matcher = pattern.matcher(prazo);
while (matcher.find()) {
	System.out.println(matcher.group()+" / "+matcher.start()); // Saída: Prazo / 11 onde 11 é a posição inicial da palavra Prazo na sua string
}