I am helping a friend with her Java homework and I adapted a solution I used in a similar project of my own for this. It is supposed to use loose/generous regex to make sure an email entered matches [email protected] or [email protected]. import java.util.Scanner; public class App { Scanner scanner; public App() { this.scanner = new Scanner(System.in); } public static void main(String[] args) { App app = new App(); app.GetUsername(true); } public void GetUsername(Boolean firstRun) { if(!firstRun) { System.out.println("The username you have entered was in an incorrect format. Must match [email protected]"); } else { System.out.println("Please enter a username:"); } String userInput = this.scanner.nextLine(); UsernameCheck usernameCheck = new UsernameCheck(userInput); if(usernameCheck.isValid()) { System.out.println("Welcome, " + userInput + "!"); } else { GetUsername(false); } } } UsernameCheck.java import java.util.regex.*; public class UsernameCheck { String username; public UsernameCheck(String username) { this.username = username; } public Boolean isValid() { return this.username.matches("[a-zA-Z0-9\\.]+@[a-zA-Z0-9\\-\\_\\.]+\\.[a-zA-Z0-9]{3}"); } } I am most interested in hearing alternative solutions for re-prompting a user if the input they've given is not valid. This works in practice, but I am looking for the cleanest way to do it.