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().
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.
[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.
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.
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.
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.
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: "???