Como pegar somente numeros de um campo?

11 respostas
vinnyparker

Pessoal continuando a migracao aqui de dbf :thumbdown: para firebird

tem um campo aqui RG:
nesse campo tem numeros e letras…

tipo assim:

[telefone removido] SSP/BA

minha consulta eu preciso que ele traga somente os numeros.
eu vi algumas funcoes do StringUtils da jacarta, como removeEnd e talz,…
mas o caso eh que tem campos que estao assim:

[telefone removido] SSP / BA

ou

[telefone removido] SSP \ BA

alguem tem uma ideia de como eu faço pra poder ele trazer somente os numeros do campo String???

11 Respostas

Poneis123

a Qtd de números é sempre a mesma? se for… pega os 10 primeiros caracteres(que serão os numeros do RG)

Caso não seja vc precisará percorrer a String e ir comparando um à um…

por exemplo:

String numeros = "[telefone removido]"; for(int i = 0; i<rg.length; i++){ if(numeros.indexOf(rg.charAt(i)) == -1) //significa que chegou em um caracter da String rg que não é número(não contem na String numeros) rg = rg.substring(0, i); } Fiz o código no forum msm, pode ter erro de sintaxe… ve se entende a logica

>

thiago.correa

Se, o teu número de RG não for de tamanho fixo, você pode substituir tudo que não for número assim:

import java.text.ParseException;

public class Teste {
	
	public static void main(String[] args) throws ParseException {
		
		
		System.out.println("[telefone removido] SSP / BA ".replaceAll("[^0-9]", ""));
		System.out.println("[telefone removido] SSP \ BA ".replaceAll("[^0-9]", ""));
		System.out.println("[telefone removido] SSP/BA ".replaceAll("[^0-9]", ""));  
		
		
		
	}
}

Agora, caso ele seja de um tamanho fixo (por ex. tamanho 10) você pode fazer um substring do texto exemplo:

"[telefone removido] SSP/BA".substring(0, 11);
Poneis123

Vixi, ignora a solução q eu disse, essa do thiago é bem melhor.

vinnyparker

thiago.correa:
Se, o teu número de RG não for de tamanho fixo, você pode substituir tudo que não for número assim:

import java.text.ParseException;

public class Teste {
	
	public static void main(String[] args) throws ParseException {
		
		
		System.out.println("[telefone removido] SSP / BA ".replaceAll("[^0-9]", ""));
		System.out.println("[telefone removido] SSP \ BA ".replaceAll("[^0-9]", ""));
		System.out.println("[telefone removido] SSP/BA ".replaceAll("[^0-9]", ""));  
		
		
		
	}
}

Agora, caso ele seja de um tamanho fixo (por ex. tamanho 10) você pode fazer um substring do texto exemplo:

"[telefone removido] SSP/BA".substring(0, 11);

O ParseException resolveria, mas eu teria q testar varias possibilidades, ai eu perco muito tempo…
tentei o substring, pq o RG tem no maximo 11 digitos, mas deu esse erro aqui oh:

versão DBase: 2.03
NUMERO RG >>>>  7474077
EstadoCivil>>>>  1
Exception in thread "Thread-2" java.lang.StringIndexOutOfBoundsException: String index out of range: 11
	at java.lang.String.substring(String.java:1934)
	at br.com.link3.dp.convert.rh.quimera.FuncionariosDao.next(FuncionariosDao.java:356)
	at br.com.link3.dp.convert.ConvertManager.export(ConvertManager.java:259)
	at br.com.link3.dp.convert.ConvertManager.processa(ConvertManager.java:132)
	at br.com.link3.dp.convert.MainForm$5.run(MainForm.java:348)
thiago.correa

Na verdade o exemplo que eu te passei ele retira tudo que não for numérico, no caso eu te mostrei as possibilidades que você me passou.
Agora quanto ao erro, quer dizer que o teu texto tem menos do que 11 caracteres.
Uma pequena correção ao invés de 11 use 10

Poneis123

Mesmo assim vai dar erro, o numero do RG que esta ali no código dele tem 7 algarismos…

Cara, usa o “[telefone removido] SSP / BA “.replaceAll(”[^0-9]”, “”) que o thiago falou… ai não precisará de subString.

rg = rg.replaceAll("[^0-9]", "");
vinnyparker

[quote=Poneis123]Mesmo assim vai dar erro, o numero do RG que esta ali no código dele tem 7 algarismos…

Cara, usa o "[telefone removido] SSP / BA ".replaceAll("[^0-9]", "") que o thiago falou… ai não precisará de subString.

rg = rg.replaceAll("[^0-9]", "");

Eu fiz isso olha aqui oh:

bean.setNumerorg(numeroRg8.replaceAll("[^0-9]", "")) ;

e dei um print no resultado.

INFO [Thread-2] (_Quimera.java:39) - Criada pasta: files/1052/dprh nome: /br/com/link3/dp/convert/rh/quimera file:/home/vinny/workspace/l3convert/bin/br/com/link3/dp/convert/rh/quimera versão DBase: 2.03 EstadoCivil>>>> 1 oiae o nome do funcionario: 1 JERONIMO NERY DA SILVA NUMERO RG >>>> 7474077 sexo >>>> MASCULINO INFO [Thread-2] (ConvertManager.java:260) - [info]: 1/1210 INFO [Thread-2] (ConvertManager.java:266) - [init] export Funcionarios EstadoCivil>>>> 1 oiae o nome do funcionario: 2 MARINA PIRES RAMOS NUMERO RG >>>> 1033083 SSP\ BA SEXO >>>> FEMININO

thiago.correa

E qual é o código que você está utilizando para imprimir isso aqui NUMERO RG >>>> 1033083 SSP\ BA

vinnyparker

Esse aqui oh…

System.out.println("NUMERO RG >>>> "+numeroRg1);

thiago.correa

Cara, como string é imutável, todos os métodos da classe string, devolvem um novo objeto.

Exemplificando

String a = "thiago";
String b = a.substring(2,5);
System.out.println(a);
System.out.println(b);

No teu caso, se você usar

System.out.println("NUMERO RG >>>> " + bean.getNumerorg());

você terá o valor armazenado e alterado no teu objeto

Metaleiro

[color=darkblue]Aqui também tem mais algumas opções :[/color]

Somente numeros na string

Criado 14 de abril de 2010
Ultima resposta 14 de abr. de 2010
Respostas 11
Participantes 4