@PedreiroDeSoftware o documento ja foi convertido todas as virgulas para ponto, o problema esta acontecendo quando eu converto esse valor q esta em string para numberformat pois ele esta vindo sem as casas decimais,
@PedreiroDeSoftware no meu aqui não deu certo essa última regex, pois ele ta capturando outro valor agora…coloquei uma foto para vc ver como esta a minha e oq esta acontecendo, o valor de 1.185 que foi impresso é referente a conversão de string para NumberFormat e o [812.64, 1.185.10] é da string, precisa converter para NumberFormat com as casas decimais…
Você extrai certo e formata errado.
Revise o parse.
Sem parse:
public void testeRegex() {
String target = "Frase: 1-CURSO T VOLTA NOT IN NM 24 3333.86 812,64 T\n"
+ "Frase: 1-CURSO T VOLTA NOT IN NM 24 31353.86 44.852.64 T\n"
+ "Frase: 1-CURSO T VOLTA NOT IN NM 24 3358443.86 4.456.812,64 T";
String regex = "(\\d{1,}-CURSO).* (\\d{1,}[\\.\\d]*[\\.,]\\d{2}) T";
Pattern padrao = Pattern.compile(regex);
Matcher matcher = padrao.matcher(target);
while (matcher.find()) {
StringBuilder numero = new StringBuilder(matcher.group(2).replaceAll("[\\.,]",""));
numero.insert(numero.length()-2, ".");
System.out.println(Double.parseDouble(numero.toString()));
}
}
@PedreiroDeSoftware Como eu comparo os resultados da minha regex?
Estou fazendo dessa forma na foto e não esta dando certo. Eu estou lendo um arquivo em pdf e os resultados da minha regex são da seguinte forma, exemplo:
1-Curso V Priscila 200,00
1-Curso V Priscila 400,00
1-Curso V Paulo 300,00
1-Curso V Italo 250,00
Estou tentando comparar dessa forma: Se os nomes forem iguais conforme tem no meu exemplo. 1-Curso V Priscila for igual o 1-Curso V Priscila preciso somar para ela os 200,00 + 400,00.
Se os nomes não forem iguais cada um fica com o seu valor,
Tentei de várias formas e não consegui fazer essa comparação. como faço para comparar as regex?
Abra outro tópico.
Vc pode usar um Map<String, List<Double>>;
Use o map.putIfAbsent(nome, new ArrayList<>()); para acumular as entradas.
Use o map.get(nome) pra recuperar a lista.
E um for para somar.
@PedreiroDeSoftware obrigado pela sua ajuda, mais antes eu tinha conseguido fazer com base na sua primeira resposta, só não conseguir entender o porque ele esta retornando 2 valores sendo que estou lendo só um nome igual com dois valores. ( o primeiro é um dos valores que foi somado, o segundo esta correto pois é a soma total), aonde esta o erro?
@PedreiroDeSoftware eu abri um tópico mais ninguém me responde, tem como vc me ajudar em outra questão?
Estou tendo dificuldades para inserir o if e else, .
O código é o seguinte se valorCompra receber algum valor ele vai entrar no if do valor compra, se ele não receber nenhum valor, ele vai retornar nulo ou zero e a mesma coisa o valorVenda, se receber algum valor ele vai entrar no if do valor Venda, se ele não receber nenhum valor, ele vai retornar nulo.
No primeiro if que é o de compra ele esta me retornando o valor correto, mais no if de venda ele não esta retornado nenhum valor, alguém pode me ajudar?
@PedreiroDeSoftware não entendi muito bem o pq usar o MathContext, no meu caso o MathContext é melhor que Bigdecimal? e com o MathContext eu consigo fazer o if e else e com o Bigdecimal não tem como fazer, seria isso? pois a minha duvida é o porque o if e else não esta funcionando, poderia me dar um exemplo em cima do código?