[RESOLVIDO]Pesquisar dentro da uma String

Pessoal, Passo o leitor do codigo de barra e tenho a seguinte string :

%ITALO G MORIALLI SANTOS :
ç01049000007305001=031212=010405612109:
%ERONILDO SANTOS:
ç01040124000009002=021306=010408543112:

gostaria de pegar da esse conteudo “ç01049000007305001”, a ideia é pegar 17 posições a partir do “ç+1”

Alguem pode me dar alguma dica ??

Eu diria que você poderia utilizar Pattern e Matcher e alguma expressão regular pra extrair o texto.

Mas nesse caso um simples split não resolve?

neste seu caso o método split() já vai resolver, porem para uma forma mais avançada você pode utilizar outras ferramentas.
Segue abaixo um tutoria de como utilizar o split().

Link: http://www.ogenial.com.br/blog/metodo-split-java/

Use o substring

		String codBarra = "ç01049000007305001=031212=010405612109";
		System.out.println(codBarra.substring(1, 18));

Substring vai ficar meio preso ao numero que você determinar o inicia que quer pegar…acho o split() melhor nessa opção…o tutorial do vitor ta bem legal…da uma olhada.

http://www.ogenial.com.br/blog/metodo-split-java/

[]'s

[quote=bastides]Substring vai ficar meio preso ao numero que você determinar o inicia que quer pegar…acho o split() melhor nessa opção…o tutorial do vitor ta bem legal…da uma olhada.

http://www.ogenial.com.br/blog/metodo-split-java/

[]'s[/quote]

gostaria de pegar da esse conteudo “ç01049000007305001”, a ideia é pegar 17 posições a partir do “ç+1”

Cara se eu entendi direito, isso vai servir pra você.
Você precisa pegar o ç e 16 números após o ç né?

String str = "%ITALO G MORIALLI SANTOS:ç01049000007305001=031212=010405612109:%ERONILDO SANTOS:ç01040124000009002=021306=010408543112:";
		
		String[] strSplit = str.toString().split(":");

		for(String s : strSplit){
			if(s.contains("ç")){
				System.out.println("s: "+s.substring(s.indexOf("ç"), s.indexOf("ç")+17));
			}

		}

O resultado desse código é

s: ç0104900000730500
s: ç0104012400000900

Ou você precisa pegar 17 posições depois do ç sem pegar o proprio ç?? se sim

String str = "%ITALO G MORIALLI SANTOS:ç01049000007305001=031212=010405612109:%ERONILDO SANTOS:ç01040124000009002=021306=010408543112:";
		
		String[] strSplit = str.toString().split("ç");

		for(String s : strSplit){

			System.out.println("s: "+s.substring(0, 17));


		}

Testa ai qualquer coisa posta…e não esquece de postar a solução!!

[]'s

ops, pra pegar a string que você falou acrescenta mais um no endIndex da substring

assim voce pega isso:

s: ç01049000007305001
s: ç01040124000009002

[]'s

Pessoal, resolvi da seguinte forma :


                String str = "%ITALO G MORIALLI SANTOS  :ç01049000007305001=031212=010405612109:";  
                  
                String[] strSplit = str.toString().split(":");  
                
                String vcodigocarteirinha= "";
          
                for(String s : strSplit){  
                    if(s.contains("ç")){  
                       // System.out.println("s: "+s.substring(s.indexOf("ç"), s.indexOf("ç")+18));  
                       vcodigocarteirinha =s.substring(s.indexOf("ç"), s.indexOf("ç")+18);
                    }  
          
                }  
                
                  System.out.println(vcodigocarteirinha.substring(1, 18)); 

[quote=evandro_araujo]Pessoal, resolvi da seguinte forma :

[code]

            String str = "%ITALO G MORIALLI SANTOS  :ç01049000007305001=031212=010405612109:";  
              
            String[] strSplit = str.toString().split(":");  
            
            String vcodigocarteirinha= "";
      
            for(String s : strSplit){  
                if(s.contains("ç")){  
                   // System.out.println("s: "+s.substring(s.indexOf("ç"), s.indexOf("ç")+18));  
                   vcodigocarteirinha =s.substring(s.indexOf("ç"), s.indexOf("ç")+18);
                }  
      
            }  
            
              System.out.println(vcodigocarteirinha.substring(1, 18)); 

[/code][/quote]

Boa, como eu havia dito, o split resolveria seu problema :wink:

Pessoal,

Reabri o tópico , porque é o seguinte, surgiu mais uma situação :

Tenho carteirinha que mostram o texto assim :



ç01049000008085005=011211=000000000000: **** isso esta resolvido com a rotina acima.


%ITALO G MORIALLI SANTOS :
ç01049000007305001=031212=010405612109:

Obs. Reparem que tem DUAS linhas e quando passo o leitor ele imprime no p:inputText APENAS a primeira linha e nao as duas

Como eu faço para imprimir essa segunda linha no inputtext ??

Alguem pode me ajudar ??

Cara essa string que você postou ai testei aqui e imprimiu

“01049000007305001”

Não era isso que você queria?

[]'s

comi bola , aqui favor desconsiderar.

Cara se a string tiver mais que um código de carteirinha não vai imprimir mesmo, pois você esta jogando o código dentro de uma variável cada vez que entra no if. então só vai imprimir o ultimo código.

for(String s : strSplit){    
		    if(s.contains("ç")){    
		       // System.out.println("s: "+s.substring(s.indexOf("ç"), s.indexOf("ç")+18));    
		       vcodigocarteirinha =s.substring(s.indexOf("ç"), s.indexOf("ç")+18);  
		    }    
		  
		}  

troca por isso que vai imprimir todos os códigos que tiver na string

		for(String s : strSplit){    
		    if(s.contains("ç")){    
		       // System.out.println("s: "+s.substring(s.indexOf("ç"), s.indexOf("ç")+18));    
		       System.out.println(s.substring(s.indexOf("ç"), s.indexOf("ç")+18));  
		    }    
		  
		}    

[]'s

Não sei o que você precisa fazer com esse código, se é só imprimir ou precisa salvar ele. O que tiver que ser feito tem que fazer dentro do for, pois a cada loop ele perde o ultimo código se você continuar jogando ele na variável.

[]'s

Entao , cara , estou lendo através de um cartão que contem outro tipo de informacao :

%ERONILDO SANTOS:Ç01040124000009002=021306=010408543112:

isso que jogo no inputext e desenvolvi a seguinte rotina :

                for(String s : strSplit){  
                    if(s.contains("ç")){  
                       // System.out.println("s: "+s.substring(s.indexOf("ç"), s.indexOf("ç")+18));  
                       vcodigocarteirinha =s.substring(s.indexOf("ç"), s.indexOf("ç")+18);
                    }  
          
                       if(s.contains("Ç")){  
                       // System.out.println("s: "+s.substring(s.indexOf("ç"), s.indexOf("ç")+18));  
                       vcodigocarteirinha =s.substring(s.indexOf("Ç"), s.indexOf("Ç")+18);
                    }  

só que esta dando o seguinte erro :

Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 18
at java.lang.String.substring(String.java:1934)
at br.uniplan.controle.CadguiaMb.validacarteirinha(CadguiaMb.java:297)
at br.uniplan.controle.CadguiaMb.onkeyup(CadguiaMb.java:310)

Ta certo. Cara você tem que entender o que esta sendo feito no seu código. Melhor você postar aqui que não entendeu o que esta sendo feito do que ficar postando cada erro que você pegar.

Primeiro substitui esses dois if’s por esse aqui.

if(s.toLowerCase().contains("ç"))

Vindo ‘ç’ ou ‘Ç’ ele vai transformar em minuscula e comparar corretamente sem ter que fazer dois if’s, ok?

Esse erro esta dando pois você esta tentando pegar a posição 18 em um string que não tem esse tamanho, tipo se a string tiver tamanho 16, você tenta pegar a posição 18, vai dar erro né. Se realmente tiver certo isso, de poder ter código com menos de 18 posições, você tem que verificar antes de tentar pegar. ex.:

		        // se o tamanho da string for menor que 18
		    	if(s.length() < 18){
		    		// voce vai pegar o tamanho da string no lugar de 18
		    		vcodigocarteirinha = s.substring(s.indexOf("ç"), s.indexOf("ç")+s.length());
		    	} else {
		    	   // senão voce pega o 18 mesmo 
		    	   vcodigocarteirinha = s.substring(s.indexOf("ç"), s.indexOf("ç")+18);
		    	}

Seu código vai ficar assim.

		for(String s : strSplit){
		    if(s.toLowerCase().contains("ç")){
		        // se o tamanho da string for menor que 18
		    	if(s.length() < 18){
		    		// voce vai pegar o tamanho da string no lugar de 18
		    		vcodigocarteirinha = s.substring(s.toLowerCase().indexOf("ç"), s.toLowerCase().indexOf("ç")+s.length());
		    	} else {
		    	   // senão voce pega o 18 mesmo 
		    	   vcodigocarteirinha = s.substring(s.toLowerCase().indexOf("ç"), s.toLowerCase().indexOf("ç")+18);
		    	}
		    }
		    System.out.println(vcodigocarteirinha);
		} 

Entendeu? Mas não esqueça que mais importante que fazer funcionar é entender o seu código.

[]'s

vou dar uma estudada, entao estou debugando aqui , mas o meu problema esta aqui

String[] strSplit = nrocarteirinha.toString().split(":");


O strSplit esta me retornando : %ITALO G MORIALLI SANTOS :

e na realidade a minha string é :

%ITALO G MORIALLI SANTOS :ç01049000007305001=031212=010405612109:

sabe como posso resolver ??

Tem alguma coisa errada ai no seu código. Rodei aqui exatamente o código abaixo e o split quebrou certinho em 3.

		String str = "%ITALO G MORIALLI SANTOS :ç01049000007305001=031212=010405612109: ";    
	    
		String[] strSplit = str.split(":");    
		  
		String vcodigocarteirinha = "";  
		  
		for(String s : strSplit){
		    if(s.toLowerCase().contains("ç")){
		        // se o tamanho da string for menor que 18
		    	if(s.length() < 18){
		    		// voce vai pegar o tamanho da string no lugar de 18
		    		vcodigocarteirinha = s.substring(s.toLowerCase().indexOf("ç"), s.toLowerCase().indexOf("ç")+s.length());
		    	} else {
		    	   // senão voce pega o 18 mesmo 
		    	   vcodigocarteirinha = s.substring(s.toLowerCase().indexOf("ç"), s.toLowerCase().indexOf("ç")+18);
		    	}
		    	System.out.println(vcodigocarteirinha);
		    }
		} 

Veja ai o teu código que deve ter algo que você esta fazendo diferente disso. Qualquer coisa posta o código ai.

Só uma duvida, essa variável nrocarteirinha contém mesmo essa string "%ITALO G MORIALLI SANTOS :ç01049000007305001=031212=010405612109: "???

[]'s

Cara, sabe o que eu percebi, quando passo o cartão no leitor, ele faz dois bips o primeiro bip ele imprime isso :

%ITALO G MORIALLI SANTOS

no segundo bip ele imprime o restante, sera que tem alguma coisa a haver ??

Obs. no inputtext esta assim :

%ERONILDO SANTOS:ç01040124000009002=021306=010408543112:

porem quando eu dou um get neste campo, aparece apenas “%ERONILDO SANTOS”

acho que ai que esta o problema certo ??