0

I have the the following input string:

1 imported box of chocolates at 10.00 1 imported bottle of perfume at 47.50

I would like to use the Java Scanner class to parse this input to create a list of product objects for example.

Please note the input line consists of multiple products (two in this case) as follows:

Quantity: 1
Name: imported box of chocolates
Price: 10.00

Quantity: 1
Name: imported bottle of perfume
Price: 47.50

Ideally I would like to parse the first product portion of the line and then the next product portion.

I know how to do this using regex etc but the question is:

What is the best way to use the Java Scanner to parse the input line?

Thank you.

1 Answer 1

1

I would just use splitting on space which is what Scanner does by default, and do the parsing myself according to the following rule.

ORDER := QUANTITY DESCRIPTION at PRICE ORDER | "" 
QUANTITY := Integer
DESCRIPTION := String
PRICE := Float

For simplicity you can do it like below, you will have to include some error handling of course. A better option would be to use a tool like antlr which will do all the heavy lifting for you.

Scanner sc = new Scanner(System.in);
ArrayList<Product> products = new ArrayList<>();
while (sc.hasNext()) {
    int quantity = sc.nextInt();
    StringBuilder description = new StringBuilder();
    while (!(String token = sc.next()).equals("at")) {
        description.append(token);
    }
    float price = sc.nextFloat();
    Product p = new Product(quantity, description.toString(), price);
    products.add(product);
}

Hope this helps.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.