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
R
rof20004
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
publicclassTesteSplit{publicstaticvoidmain(String[]args){Stringtexto="Oi, tudo bem ?";StringtextoSplit[]=texto.split(",");System.out.println(textoSplit[0]);System.out.println(textoSplit[1]);}}
JuniorMaia
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.
fabiodurgante
na verdade minha string é assim
Vendedor: teste Data: 12/01/2013
Nome: teste CPF/CNPJ: [CPF removido]
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
JuniorMaia
então use split no ":", ficará assim:
publicclassSplit{/** * @param args the command line arguments */publicstaticvoidmain(String[]args){Stringfrete="comerciante Frete: 5,00";//Fazendo split da String String[]fretes=frete.split(":");System.out.println(fretes[1]);}}
beleza cara funcionou certo fazendo o esquema acima
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.
fabiodurgante
a string
Vendedor: teste Data: 12/01/2013
Nome: teste CPF/CNPJ: [CPF removido]
Frete por conta: Sem Frete Frete: 0,00
Pagamento: Prazo Total: 0,00
isso é 6 ai ele pego 0,00 Pagamento, agora para pegar isso e colocar na ultima linha depois da palavra Prazo .
JuniorMaia
cara posta teu código aí que eu to meio confuso, não sei como está organizado essas tuas strings
fabiodurgante
indice=0;Filetemp1=newFile("C:\\davs\\dav.txt");temp1.delete();String[]prazo;// davs.removeAll(davs);// jTextArea1.setText("");Filepasta=newFile("C:\\teste\\PDF");Filearquivos[]=pasta.listFiles();Filenovo=newFile("C:\\davs\\dav.pdf");if(arquivos.length==0){JOptionPane.showMessageDialog(null,"Não Possui DAVS Pendentes");return;}for(inti=0;i<arquivos.length;i++){// System.out.println(cont);arquivos[i].renameTo(novo);list_all_pdf_areatextfield_botao_navegacaopdf=newlist_all_pdf_areatextfield_botao_navegacao();pdf.setEnderecoRecurso("C:\\davs\\dav.pdf");Stringretorno=pdf.getConteudo();FileWriterx=null;try{x=newFileWriter("C:\\davs\\davs.txt",false);x.write(retorno);x.close();}catch(IOExceptionex){System.out.println("erro aqui");Logger.getLogger(list_all_pdf_areatextfield_botao_navegacao.class.getName()).log(Level.SEVERE,null,ex);}Stringmensagem="";Filefile=newFile("C:\\davs\\davs.txt");try{FileReaderreader=newFileReader(file);BufferedReaderinput=newBufferedReader(reader);Stringlinha;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 freteSystem.out.println(fretes[6]);//System.out.println(mensagem);davs.add(mensagem);jTextArea1.append(mensagem+"====================================================== \n");}catch(IOExceptionioe){}Filetemp=newFile("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…
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: [CPF removido]
Frete por conta: Sem Frete Frete: 0,00
Pagamento: Prazo Total: 0,00
como posso fazer isso ???
JuniorMaia
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.
fabiodurgante
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
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.