Pergunta

Em Java, eu preciso certificar-se de uma String contém apenas alphanumeric, space e dash caracteres.

Eu encontrei o org.apache.commons.lang.StringUtils classe eo isAlphanumericSpace(String) método quase adequada ... mas eu também precisa incluir traços.

Qual é a melhor maneira de fazer isso? Eu não quero usar expressões regulares.

Foi útil?

Solução

Hum ... apenas programá-lo sozinho usando String.chatAt ( int ), é muito fácil ...

percorrer todos caractere na cadeia de caracteres usando um índice de posição, em seguida, compará-lo usando o fato de que os caracteres ASCII de 0 a 9, a apenas para z e A para usar Z códigos consecutivos, então você precisa para verificar que o personagem x numericamente verifica uma das condições:

  • entre '0' e '9'
  • entre 'a' e 'z'
  • entre 'A e 'Z'
  • um espaço ' '
  • um hífen '-'

Aqui está um exemplo básico de código (usando CharSequence, que permite a passagem de uma String, mas também um StringBuilder como arg):

public boolean isValidChar(CharSequence seq) {
    int len = seq.length();
    for(int i=0;i<len;i++) {
        char c = seq.charAt(i);
        // Test for all positive cases
        if('0'<=c && c<='9') continue;
        if('a'<=c && c<='z') continue;
        if('A'<=c && c<='Z') continue;
        if(c==' ') continue;
        if(c=='-') continue;
        // ... insert more positive character tests here
        // If we get here, we had an invalid char, fail right away
        return false;
    }
    // All seen chars were valid, succeed
    return true;
}

Outras dicas

Você pode usar:

StringUtils.isAlphanumericSpace(string.replace('-', ' '));

Apenas percorrer a string, usando os métodos caráter de classe em java.lang.Character para testar se cada personagem é aceitável ou não. Que é, presumivelmente, tudo o que os métodos StringUtils fazer, e expressões regulares são apenas uma maneira de dirigir um motor generalizada para fazer o mesmo.

Você tem 1 de 2 opções: 1. Compor uma lista de caracteres que podem ser na seqüência, em seguida, um loop sobre a verificação corda para se certificar de cada personagem está na lista. 2. Compor uma lista de caracteres que não pode ser na seqüência, em seguida, um loop sobre a corda fará para garantir que cada personagem não está na lista.

Escolha qualquer opção é mais rápida para compor a lista.

Definitivamente usar uma expressão regex. Não há nenhum ponto em escrever o seu próprio sistema quando um sistema muito abrangente no lugar para essa tarefa exata. Se você precisa aprender sobre ou escovar acima em regex em seguida, confira este site, é ótimo: http://regexr.com

Gostaria de desafiar a si mesmo em um presente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top