@PedreiroDeSoftware vi que vc pegou o padrão de 3 números e 2 casas decimais, só que esqueci de falar que a quantidades desses números mudam, esse valor da frase 812,64 tem lugares no meu arquivo que é outro número, exemplo tem lugar que é 2815,67 ou 115443,82, como fazer pra ele pegar dessa forma ?
frase = frase.replaceAll(".*(\\d{1,}\\.\\d{2}).*","$1"); essa regex pega números no formato numero.numero;
Se o formato é numero,numero a regex deve ser ajustada para: frase = frase.replaceAll(".*(\\d{1,},d{2}).*","$1");
Ocorre que quando você for fazer o parse, deve trocar a virgula por ponto.
ex: frase.replace(",",".");
Para a procura desejada, você deve usar pattern com o intúito de mapear o início e o fim de cata match referente à expressão regular, e usar o subString(inicio, fim) para pegar o resultado.
O que posso recomendar é apenas que estude, pode começar por aqui:
@PedreiroDeSoftware to estudando direto, ja vi esse video muito bom, mais tem coisas que esta difícil de entender rssrs.
frase = frase.replaceAll(".(\d{1,},d{2}).","$1");
Dessa forma que vc passou ela esta pegando a frase inteira, tem como vc me ajudar só nessa questão de eu pegar a numeração completa independente da quantidade de números ?
Faltou um escape no segundo d:". *(\\d{1,},\\d{2}).* "
Mas olha ai o proposto:
public void testeRegex() {
String target = "exemplo tem lugar que é 2815,67 ou 115443,82, como fazer pra ele pegar";
Pattern padrao = Pattern.compile("\\d{1,},\\d{2}");
Matcher matcher = padrao.matcher(target);
while (matcher.find()) {
System.out.println(target.substring(matcher.start(), matcher.end()));
}
}
}
@PedreiroDeSoftware eu entendi oque vc fez, só que a minha dificuldade esta no exemplo que te passei da minha frase.
Na minha frase tem outros números que não quero pegar.
E os números que quero pegar da minha frase mudam de acordo com o arquivo que estou lendo, tem vez que os ultimos valores são 812.64 ou 44852.64 ou 4456812.64 ou etc…
Frase: 1-CURSO T VOLTA NOT IN NM 24 3333.86 812.64 T
Frase: 1-CURSO T VOLTA NOT IN NM 24 31353.86 44852.64 T
Frase: 1-CURSO T VOLTA NOT IN NM 24 335443.86 4456812.64 T
A minha dificuldade é ignorar toda a minha frase e pegar só a última numeração que pode ser o 812.64, 44852.64, 4456812.64 ou outro qualquer…
Antes da numeração que quero pegar tem outros numeros q mudam de tamanho tb.
A minha regex precisa pega só essa ultima numeração completa independente da quantidade de números…
Lembrando que na minha frase tem a palavra 1-CURSO e eu queria manter essa palavra na minha regex para eu localizar essa frase dentro do meu arquivo que estou lendo, consegue me ajudar?
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 44852.64 T\n"
+ "Frase: 1-CURSO T VOLTA NOT IN NM 24 335443.86 4456812.64 T";
String regex = "(\\d{1,}-CURSO).*( \\d{1,}\\.\\d{2}) T";
String filter;
Pattern padrao = Pattern.compile(regex);
Matcher matcher = padrao.matcher(target);
while (matcher.find()) {
filter = target.substring(matcher.start(), matcher.end());
System.out.println(filter.replaceAll(regex, "$1 $2"));
}
}
Mantenha o $1.
Regex trabalha com reconhecimento de padrões.
Você tem que observar o padrão da sequência.
@PedreiroDeSoftware funcionou direitinho, só que veio outra questão, tem vezes que o número que estou pegando, ele é muito grande e acaba tendo mais de um .(ponto) na numeração, exemplo 1.185.10 ou 22.345.45 ou 122.345.45, nesse caso ele só esta considerando o primeiro número e os 2 últimos, e não completo, como resolver essa questão?
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";
//a regex não está boa mas pega o valor, para garantir tem que comparar o tamanho do número com a quantidade de pontos
String regex = "(\\d{1,}-CURSO).*( \\d{1,}[\\.\\d]*\\.\\d{2}) T";
String filter;
Pattern padrao = Pattern.compile(regex);
Matcher matcher = padrao.matcher(target);
while (matcher.find()) {
filter = target.substring(matcher.start(), matcher.end());
System.out.println(filter.replaceAll(regex, "$1 $2"));
}
}
@PedreiroDeSoftware Deu certo…mano muito obrigado pela sua ajuda, vou estudar mais, pois essa parada é muito louca de entender rsrs, muito obrigado mesmo, Deus te abençõe…
@PedreiroDeSoftware me tira uma dúvida quando eu pego só o valor para jogar em uma variável, o valor esta vindo com um espaço antes, exemplo ( 567,44), como faço para retirar esse espaço?
@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,