Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using startsWith() method in switch case in Java

I want to use startsWith() in switch case in Java, but it expects a String and not a boolean value. I tried to create a wrapper function for it and return a String, but I am getting an error saying constant expected.

I want to convert the following if-else block in switch case:

if (currCmd.equals(allProduct)) {
    warehouseObj.viewItems();

} else if (currCmd.startsWith(buyProduct)) { // todo
    String productId = currCmd.substring(4);
    long lProductId=Long.parseLong(productId);
    cartProcessor.addItem(currUser.getUserid(),lProductId,currCart,warehouseObj);

} else if (currCmd.equals(viewCart)) {
    cartProcessor.viewItems(currUser.getUserid(),currCart);

} else if (currCmd.equals(checkout)) {
    cartProcessor.checkOut(currUser.getUserid(),currCart);

} else if (currCmd.startsWith(delete)) { // todo
    String productId = currCmd.substring(7);
    long lProductId =Long.parseLong(productId);
    warehouseObj.deleteItem(lProductId, currUser.getIsAdmin());

} else if (currCmd.equals(addProduct)) {
    if (!currUser.getIsAdmin()) {
        System.out.println("PERMISSION DENIED");

    } else {
        // remove sc
        Scanner sc = new Scanner(System.in);
        addProduct2Warehouse(warehouseObj, sc);
    }
} else  {
    System.out.println("INVALID COMMAND!");
}
like image 609
javaNoob8181 Avatar asked Oct 28 '25 07:10

javaNoob8181


1 Answers

Assuming that currCmd is a String and using java 14/15 with preview or 16+ you can do it like this:

switch (currCmd) {
       case null -> System.out.println("INVALID COMMAND!");
       case "allProduct" -> warehouseObj.viewItems();
       case String s when s.startsWith("buyProduct") -> {
              String productId = currCmd.substring(4);
              long lProductId=Long.parseLong(productId);      
              cartProcessor.addItem(currUser.getUserid(),lProductId,currCart,warehouseObj);
            }
       case "viewCart" -> cartProcessor.viewItems(currUser.getUserid(),currCart);
       case "checkout" -> cartProcessor.checkOut(currUser.getUserid(),currCart);
       case String s when s.startsWith("delete") -> {
              String productId = currCmd.substring(7);
              long lProductId =Long.parseLong(productId);
              warehouseObj.deleteItem(lProductId, currUser.getIsAdmin());
            }
       case "addProduct" -> {
              if (!currUser.getIsAdmin()) {
                System.out.println("PERMISSION DENIED");

              } else {
                // remove sc
                Scanner sc = new Scanner(System.in);
                addProduct2Warehouse(warehouseObj, sc);
              }
            }
       default -> {
              System.out.println("INVALID COMMAND!");
       }

Using java 8 to 13 personally i would implement it as follows:

switch (currCmd) {
            case "allProduct": {
                warehouseObj.viewItems();
            }
            case "viewCart": {
                cartProcessor.viewItems(currUser.getUserid(),currCart);
            }
            case "checkout": {
                cartProcessor.checkOut(currUser.getUserid(),currCart);
            }
            case "addProduct": {
                if (!currUser.getIsAdmin()) {
                    System.out.println("PERMISSION DENIED");
                } else {
                    // remove sc
                    Scanner sc = new Scanner(System.in);
                    addProduct2Warehouse(warehouseObj, sc);
                }
            }
            default: {
                if (currCmd.startsWith(buyProduct)) { // todo
                    String productId = currCmd.substring(4);
                    long lProductId=Long.parseLong(productId);
                    cartProcessor.addItem(currUser.getUserid(),lProductId,currCart,warehouseObj);
                } else if (currCmd.startsWith(delete)) { // todo
                    String productId = currCmd.substring(7);
                    long lProductId =Long.parseLong(productId);
                    warehouseObj.deleteItem(lProductId, currUser.getIsAdmin());
                } else  {
                    System.out.println("INVALID COMMAND!");
                }
            }
        }

Hopefully it will help someone.

like image 52
Eli P Avatar answered Oct 31 '25 13:10

Eli P