Skip to content
Advertisement

How to handle empty scanner input strings in java?

I’m working on a .xml file generator. It works by asking the user to input 5 different values and then using them for generating a .xml data container. This is the code:

public class Generator {
public static void main(String[] args) throws InterruptedException {
    Scanner reader = new Scanner(System.in);
    while (true) {

        System.out.println("Input the furni ID (input only numbers here).");
        String furniID = reader.nextLine();

        System.out.println("Input the furni's file name (without '.swf'. You can input numbers, letters and underscores here).");
        String furniFileName = reader.nextLine();

        System.out.println("Input the furni's revision (input only numbers here).");
        String furniRevision = reader.nextLine();

        System.out.println("Input the furni's name (this will be the name that it will display when you click on the furni in a room or in your inventory).");
        String furniName = reader.nextLine();

        System.out.println("Input the furni's description (this will be displayed under the furni's name).");
        String furniDescription = reader.nextLine();

        System.out.println("Input the furni's furniline. This is just a name for a group of furnis that belong to the same collection. For example you can input 'custom' (without quotation marks).");
        String furniLine = reader.nextLine();

        System.out.println("Generating your furnidata...");
        System.out.println(" ");

        TimeUnit.SECONDS.sleep(1);

        System.out.println("<furnitype id="" + furniID + """ + " classname="" + furniFileName + """ + ">");
        System.out.println("<revision>" + furniRevision + "</revision>");
        System.out.println("<xdim>1</xdim>");
        System.out.println("<ydim>1</ydim>");
        System.out.println("</partcolors>");
        System.out.println("<name>" + furniName + "</name>");
        System.out.println("<description>" + furniDescription + "</description>");
        System.out.println("</adurl");
        System.out.println("<offerid>-1</offerid>");
        System.out.println("<buyout>0</buyout>");
        System.out.println("<rentofferid>-1</rentofferid>");
        System.out.println("<rentbuyout>0</rentbuyout>");
        System.out.println("<bc>0</bc>");
        System.out.println("<excludeddynamic>0</excludeddynamic>");
        System.out.println("<customparams/>");
        System.out.println("<specialtype>1</specialtype>");
        System.out.println("<canstandon>0</canstandon>");
        System.out.println("<cansiton>0</cansiton>");
        System.out.println("<canlayon>0</canlayon>");
        System.out.println("<furniline>" + furniLine + "</furniline>");
        System.out.println("</furnitype>");
        System.out.println(" ");

        System.out.println("Do you want to generate another furnidata? (YES/NO)");
        String confirmation = reader.nextLine();

        if (confirmation.equals("NO")) {
            System.out.println("Furnidata generator has been stopped.");
            break;
        } else if (confirmation.equals("no")) {
            System.out.println("Furnidata generator has been stopped.");
            break;
        } else if (confirmation.equals("No")) {
            System.out.println("Furnidata generator has been stopped.");
            break;
        }
    }
}

I want the program to detect when someone inputs an empty string by pressing the enter key with no written text and print a message asking the user to not input empty strings. I tried this with a try-catch statement but after printing the message the program executes the next line instead of re-executing the one where the user input an empty string. How can I achieve this?

Advertisement

Answer

You might want to use.

 String furniID = reader.nextLine();
 furniID = furniID.trim();
 if(furniID.equals("")){
     System.out.println("Empty Here. ");
 }

As suggested in comments .readLine() returns an empty string if you supply a blankline or simply hit enter.

The above regex expression will take care of empty string "" or whitespaces that user might enter.

edit 1 As suggested in comments regex could have been over-kill here. The string.trim() will take care of tabs, trailing-leading whitespaces and empty string.

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement