我有以下输入字符串:
1 imported box of chocolates at 10.00 1 imported bottle of perfume at 47.50
我想使用Java Scanner类来解析此输入以创建产品对象列表,例如。
请注意输入行包含多个产品(本例中为两个),如下所示:
Quantity: 1
Name: imported box of chocolates
Price: 10.00
Quantity: 1
Name: imported bottle of perfume
Price: 47.50
理想情况下,我想解析该行的第一个产品部分,然后解析下一个产品部分。
我知道如何使用正则表达式等,但问题是:
What is the best way to use the Java Scanner to parse the input line?
谢谢。
答案 0 :(得分:1)
我只是在空间上使用拆分,这是Scanner默认执行的操作,并根据以下规则自行解析。
ORDER := QUANTITY DESCRIPTION at PRICE ORDER | ""
QUANTITY := Integer
DESCRIPTION := String
PRICE := Float
为简单起见,您可以像下面这样做,当然,您必须包含一些错误处理。一个更好的选择是使用像antlr这样的工具,它将为你完成所有繁重的工作。
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);
}
希望这有帮助。