Estou com um problema creio que simples, estou tentando percorrer as letras inseridas em um determinado campo de texto e verificar a diferença dele se é numero ou letras.
Segue meu código feito até agora.
public void somenteNumeros(KeyEvent evento, JTextField campoDeTexto) {
String dados = campoDeTexto.getText();
String[] valor = new String(dados);
int tamanho = valor.length;
if (!(evento.getKeyCode() == evento.VK_BACK_SPACE)) {
if (!((evento.getKeyCode() >= evento.VK_0 && evento.getKeyCode() <= evento.VK_9)
|| (evento.getKeyCode() >= evento.VK_NUMPAD0 && evento.getKeyCode() <= evento.VK_NUMPAD9))) {
for (int i = 0; i <= tamanho; i++) {
if ((valor[i] != "0") || (valor[i] != "1") || (valor[i] != "2") || (valor[i] != "3")
|| (valor[i] != "4") || (valor[i] != "5") || (valor[i] != "6") || (valor[i] != "7")
|| (valor[i] != "8") || (valor[i] != "9")) {
System.out.println("Dados \n " + valor[i]);
//campoDeTexto.setText(campoDeTexto.getText().substring(0, campoDeTexto.getText().length() - i));
}
}
}
}
}
Oi Staroski, eu gostaria de percorrer a String do Jtextfield, vamos supor um exemplo aqui, no meu txt eu digito Rafael, meu nome tem 6 letras, eu gostaria de percorrer essas 6 letras do meu nome e verificar se contém algum número no meio, se não tiver números o código continua normalmente, porém se tiver algum número no meio ele localiza a posição do vetor e remove ele, parece rosto o que estou fazendo, mas estou tentando criar minhas próprias ferramentas de trabalho, meio que minha própria biblioteca para eu pode usar, sei que existe funções prontas para esse tipo de trampo, mas quero fazer no modo manual, para ganhar um pouco de experiência, pois só assim sei que vou aprender.
Bom dia @OliverG, se você deseja apenas remover os digitos do texto que digitou, você pode tentar adicionar esse metodo em sua classe e chamar ele nesse metodo passando o JtextField:
public void removeNumeros(JTextField campoDeTexto) {
campoDeTexto.setText(campoDeTexto.getText().replaceAll("\d",""));
}
Então, eu usaria o replace, porém estou tentando criar algo sem precisar utilizar as funções disponível já. Sei que já tem essas funções prontas, porém para estudos gostaria de recriar essas funções em meu modo.
boolean achouNumero = false;
for ( char c : seuTextField.getText().toCharArray() ) {
if ( c >= '0' && c <= '9' ) {
achouNumero = true;
break;
}
}
if ( !achouNumero ) {
// não achou um número...
}
Eu sinceramente acho legal vc querer construir seus próprios métodos para entender como as coisas funcionam, mas para aplicar no mundo real é muito melhor você utilizar o que está pronto e testado. Se vc quer mesmo saber sobre reconhecimento de padrões em Strings e processamento de Strings o buraco é muito, mas muito mais embaixo. Se quiser se aventurar, busque por:
Isso, aí sim faz sentido, vc usar coisas prontas para montar as suas. Uma sugestão, pq vc não melhora esse “tipo” com constantes ou uma enumeração?
Exemplo usando constantes
Arquivo: GuiUtils.java
public class GuiUtils {
public static final int TIPO_X = 1;
public static final int TIPO_Y = 2;
...
public static void tipoAceitoDeCaracter( JTextField campoDeTexto, int tipo ) {
String valor = campoDeTexto.getText();
if ( tipo == TIPO_X ) {
valor = valor.replaceAll( "[^0-9]", "" );
} else if ( tipo == TIPO_Y ) {
// ...
}
campoDeTexto.setText( valor );
}
}
Exemplo usando uma enumeração
Arquivo: TipoAceito.java
public enum TipoAceito {
TIPO_X,
TIPO_Y;
}
Arquivo: GuiUtils.java
public class GuiUtils {
// eu melhoraria esse nome tbm...
public static void tipoAceitoDeCaracter( JTextField campoDeTexto, TipoAceito tipo ) {
String valor = campoDeTexto.getText();
switch ( tipo ) {
TIPO_X:
valor = valor.replaceAll( "[^0-9]", "" );
break;
TIPO_Y:
// ...
break;
}
campoDeTexto.setText( valor );
}
}
Claro, os identificadores TIPO_X e TIPO_Y você vai renomear para algo que faça sentido. Seu método tbm provavelmente é estático, pq ele não muda o estado do objeto corrente, então vc não precisa instanciar a classe para chamá-lo.