Pengado numeros de uma string

9 respostas
I

Eu estou querendo pagar parte de uma string sendo que essa parte é numero, o problema é que eu nao sei a posição em que o primeiro numero estar e só quero pegar alguns desses números, tipo:

String palavra=" ad NF 1122 jkj das65456";

Eu só quero pegar o 1122 os outros números não me interessa, como faço isso?! Só para lembrar, eu não sei a posição, mas sei que antes do numero que eiu quero sempre vem “NF”…

9 Respostas

Rodrigo_Sasaki

Essas coisas são sempre chatinhas, você poderia usar expressões regulares, já fez isso antes?

a regex “NF ?\d+” pode resolver seu problema, mas no caso ela irá retornar o NF junto com os números, se aplicasse a expressão à essa String que você usou como exemplo ela casaria com “NF 1122”, você pode tratar o resto a partir daí, ou até tentar uma abordagem diferente.

Rodrigo_Sasaki

Vamos ver se dá pra fazer uma regex que te ajude melhor, precisamos de mais informações.

Os números que você quer são sempre os primeiros números da String? Ou antes deles podem aparecer outros números?

I

Aparecem números antes também. Estava usando .replaceAll("//D",""); para pegar todos os números depois de NF, mas aparecia números que eu não queria que aparecesse.

Rodrigo_Sasaki

certo, você pode cortar a String antes, ou fazer da maneira que eu falei.

Tentou usar a expressão ?

I

Eu nunca usei antes não sei como funciona

Rodrigo_Sasaki

Tem um artigo do GUJ que explica um pouco sobre como usá-las, dê uma lida:

http://www.guj.com.br/articles/1

bortolettot

Boa noite, da para fazer dessa maneira também.

String palavra=" ad NF 1122 jkj das65456";  
		
int indexOf = palavra.indexOf("NF");

palavra = palavra.substring(indexOf+2, palavra.length());
StringBuilder b = new StringBuilder();
boolean achoNumero = false;
for(int i = 0; i< palavra.length(); i++){
	if(Character.isDigit(palavra.charAt(i))){
		achoNumero = true;
		b.append(palavra.charAt(i));
	}else{
		if(achoNumero){
			break;
		}
	}
}
System.out.println(b.toString());
tondatto

Utilize Regex.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Método que retorna uma lista de todas as ocorrências 
 * de números que atendem ao padrão "NF\s+(\d+)"
 */
public List<Integer> getNumbersFromString(String texto){
	List<Integer> lista = new ArrayList<Integer>();
	
	// Cria seu padrão do Regex para recuperar todo 
	// numero (\d+) precedido por 'NF' e espaço sequencial
	Pattern pattern = Pattern.compile("NF\\s+(\\d+)");
	
	Matcher matcher = pattern.matcher(texto);
	
	// Procurar por todas as ocorrencias
	// e adiciona-las na lista
	while(matcher.find()){
		int number = Integer.parseInt(matcher.group(1));
		lista.add(number)
	}
	
	return lista;
}
Exemplo de uso:
String texto = " ad NF 1122 jkj das65456\n"
		+ " gssg NF   67323 owey 234laj4";
List<Integer> numeros = getNumbersFromString(texto);
for(n : numeros)
	System.out.println(n);
Saída:
1122
67323
tondatto

Obviamente que o método que postei acima deve estar dentro de uma Classe.

Criado 12 de setembro de 2012
Ultima resposta 14 de set. de 2012
Respostas 9
Participantes 4