Java, Certifique-se de uma String contém apenas alfanuméricos, espaços e traços
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.
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.