No client se preocupe so com o input ser numerico como no exemplo do link, e no server voce cria validacao para o negocio, como a questao de nao deixar gravar o que for maior que 65000.
Fiz um teste com as três soluções, regex compilado previamente, na hora e com exceções. Nenhuma apresenta ganhos tão significativos, ~330ns no melhor caso.
Sem regex acredito que tenha mais velocidade, segue abaixo um metodo que uso para verificar se um string contem somente numeros. Peguei de uma dica de um site ae faz tempo, e tem me ajudado sempre que precisei.
/**
* This method checks if a String contains only numbers
*/
public boolean containsOnlyNumbers(String str) {
//It can't contain only numbers if it's null or empty...
if (str == null || str.length() == 0)
return false;
for (int i = 0; i < str.length(); i++) {
//If we find a non-digit character we return false.
if (!Character.isDigit(str.charAt(i)))
return false;
}
return true;
}
[quote=Bruno Laturner]Fiz um teste com as três soluções, regex compilado previamente, na hora e com exceções. Nenhuma apresenta ganhos tão significativos, ~330ns no melhor caso.
Quando falei em complexidade, não estava falando em performance. Só que é nem mais fácil alguém na equipe entender o catch, do que entender a Regex.
Aqui mesmo foram dadas pelo menos 3 regex diferentes.
[quote=ViniGodoy][quote=Bruno Laturner]Fiz um teste com as três soluções, regex compilado previamente, na hora e com exceções. Nenhuma apresenta ganhos tão significativos, ~330ns no melhor caso.
Quando falei em complexidade, não estava falando em performance. Só que é nem mais fácil alguém na equipe entender o catch, do que entender a Regex.
Aqui mesmo foram dadas pelo menos 3 regex diferentes.[/quote]
Não entendi o que estão questionando, regex vs sem regex?
Se é melhor deixar uma regex lá ou se é melhor deixar o controle de erro através de uma exceção.
O regex tem a implicação de ser mais difícil para quem lê entender. Muitos também desconfiam da performance da Regex.
E o controle de erro através de uma exceção é algo que muitos programadores evitam, ou por acharem que também gera um código confuso, ou porque vieram do C++, onde exceções são lentas de serem disparadas e capturadas.
No fundo, é uma discussão extremamente purista. Eu só comentei que o pessoal estava complicando porque a solução tratando a exceção do parseInt me pareceu óbvia demais, e não consegui entender como ainda não havia sido proposta.
[quote=Andre Lopes]Muito Obrigado pelas respostas pessoal.
Eu fiz desse jeito, parecido com o que está acima.[/quote]
Essa solução cria um objeto da classe Integer de maneira completamente desnecessária. A solução que postei tem um código equivalente (idêntico, na verdade), mas usando Integer.parseInt, que é o adequado caso você só precise do tipo primitivo.
[quote=Andre Lopes]Essa questão de o usuário selecionar a porta pra se conectar ao chat… Ela entra como MODEL ou CONTROL?
Pra mim entraria como CONTROL…[/quote]
O usuário seleciona na View. O controle valida se a porta está correta. E encaminha o valor da porta à classe de Sockets que está no model.