Como pegar somente numeros de um campo?

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

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

tipo assim:

0101010101 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:

0101010101 SSP / BA

ou

0101010101 SSP \ BA

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

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 = "0123456789"; 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

>

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("0101010101 SSP / BA ".replaceAll("[^0-9]", ""));
		System.out.println("0101010101 SSP \ BA ".replaceAll("[^0-9]", ""));
		System.out.println("0101010101 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:

"1020462869 SSP/BA".substring(0, 11);

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

[quote=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("0101010101 SSP / BA ".replaceAll("[^0-9]", ""));
		System.out.println("0101010101 SSP \ BA ".replaceAll("[^0-9]", ""));
		System.out.println("0101010101 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:

"1020462869 SSP/BA".substring(0, 11);

[/quote]

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)

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

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

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

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

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

Cara, usa o "0101010101 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

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

Esse aqui oh…

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

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

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

Somente numeros na string