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 ???
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
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.
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.
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…
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.
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.
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
}