Melhoria do algoritmo

Pessoal boa noite.

Poderiam me ajudar por favor na melhoria deste algoritmo?

Eis o problema:
Crie um algoritmo que solicite seu nome completo e avalie se o dado informado é válido. Se o diálogo de entrada for cancelado, o aplicativo deve ser encerrado imediatamente. Se o nome não for válido, uma mensagem de erro deve ser exibida e o aplicativo deve ser encerrado. Se o nome for válido, o aplicativo deve exibir uma mensagem com o nome informado. As regras para a validação do dado informado são as seguintes:

a) deve ter de 5 a 50 caracteres
b) deve ter pelo menos um nome e um sobrenome
c) o nome deve ter ao menos 2 caracteres
d) o último sobrenome deve ter ao menos 2 caracteres

Dúvida 1: Como posso saber o tamanho do sobrenome sem ter que criar uma nova String? Eu gostaria de saber a quantidade de caracteres utilizando o método length() diretamente no código: nome.substring(nome.lastIndexOf(" ") + 1,nome.length()), ou seja, como faço para saber o length disso sem a necessidade de criar uma String e depois invocar essa String com o método length()?

Dúvida 2: se eu não digitar o sobrenome, a variável sobrenome assume o nome. Parece que o substring não está funcionando.

import javax.swing.JOptionPane;

public class C0707Exercicio01 {

public static void main (String[] args) {

  String nome = "Informe seu nome:";
  nome = JOptionPane.showInputDialog(null,nome);
  String sobrenome = nome.substring(nome.lastIndexOf(" ") + 1,nome.length());

// JOptionPane.showMessageDialog(null,sobrenome);
// JOptionPane.showMessageDialog(null,sobrenome.length());

  if (nome == null || nome.length() == 0 || nome.length() < 5 || nome.length() > 50){
  	JOptionPane.showMessageDialog(null, "Nome inválido");
  }else if (sobrenome.length() < 2 || sobrenome.length() == 0) {
  		JOptionPane.showMessageDialog(null,"O último sobrenome deve conter pelo menos 2 caracteres");
  		}else {
  			JOptionPane.showMessageDialog(null, "Nomve válido: " + nome);
  	}

}
}

Obrigado.

Dica geral: dê uma olhada no método split() da classe String, que separa a string por um delimitador (espaço, no seu caso) e retorna num array de Strings.

Abraço.

1 curtida

Obrigado pela ajuda e pelo método split. O problema é que no exercício eu não poderia utilizar esse método. Tinha que utilizar os métodos substring, indexOf. Fiz um outro exercício parecido:

import javax.swing.JOptionPane;

public class C0708Exercicio02 {

public static void main (String[] args) {

  String email = JOptionPane.showInputDialog(null,"Informe seu e-mail: ");
  String arroba;
  if (email == null || email.length()==0){
  	JOptionPane.showMessageDialog(null, "E-mail inválido!");
  	System.exit(0);
  }else {
  	
  	if(email.indexOf(" ") > 0){
  		JOptionPane.showMessageDialog(null, "Não pode haver espaço no email informado");
  	}else {
  		if (email.indexOf("@")<2) {
  			JOptionPane.showMessageDialog(null,"Deve haver ao menos 2 caracteres antes do @");
  		}else {
  			arroba = email.substring(email.indexOf("@")+1,email.length());
  			if (arroba.length() < 2 ){
  				JOptionPane.showMessageDialog(null,"Deve haver ao menos 2 caracteres depois do @");
  			}else {
  			
  				arroba = email.substring(email.indexOf("@")+1,email.length());
  				if (arroba.indexOf("@") > 0) {
  					JOptionPane.showMessageDialog(null, "Não pode haver mais de um @");
  				}else {
  					JOptionPane.showMessageDialog(null, "Email válido: "+ email);
  				}
  			}	
  		}
  	}
  }	

}
}