如何在纯文本类的购物小票中获取并分析数字信息?
一、StringTokenzier类的使用
- StringTokenzier类可以将String对象分析成独立使用的单词,其具体有两构造方法:
StringTokenzier(String s),使用默认标记分隔单词;
StringTokenzier(String s, String delim),使用指定的delim字符分隔单词; - 利用StringTokenizer的构造方法我们可以构建出来一个StringTokenizer对象,即关于String s的分析器;
- 这个分析器可以使用nextToken()方法获取分析器内的单词,也可以使用countTokens()方法得到分析器中的单词数,还可以用hasMoreTokens()方法确认是否分析器内还有单词。
二、使用String Tokenzier分析小票
Main.java
package StringTokenizer;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("请输入购物小票内容:");
Scanner reader = new Scanner(System.in);
String shoppingReceipt = reader.next();
PriceToken priceToken = new PriceToken();
System.out.println("本次购买:"+ priceToken.getGoodAcounts(shoppingReceipt)+"件商品");
System.out.println("共 计:"+ priceToken.getAverPrice(shoppingReceipt)+"元");
System.out.println("平均每件:"+priceToken.getAveragePrice(shoppingReceipt)+"元");
}
}
PriceToken.java
package StringTokenizer;
import java.util.StringTokenizer;
public class PriceToken {
//分析购物小票数据并返回一个StringTokenizer对象
public StringTokenizer getStringTokenizer(String shoppingReceipt){
String regex = "[^0123456789.]+"; //匹配非数字字符序列
shoppingReceipt = shoppingReceipt.replaceAll(regex, "#"); //将订单中文字全替换为#
StringTokenizer stringTokenizer = new StringTokenizer(shoppingReceipt, "#"); //以#为分隔找出所有数字
return stringTokenizer;
}
//获取商品的数目
public int getGoodAcounts(String shoppingReceipt){
StringTokenizer stringTokenizer = getStringTokenizer(shoppingReceipt);
return stringTokenizer.countTokens();
}
//获取商品价格的总和
public double getAverPrice(String shoppingReceipt){
StringTokenizer stringTokenizer = getStringTokenizer(shoppingReceipt);
double sum = 0;
while (stringTokenizer.hasMoreTokens()){
String item = stringTokenizer.nextToken();
double price = Double.parseDouble(item);
sum += price;
}
return sum;
}
//获取商品的平均价格
public double getAveragePrice(String shoppingReceipt){
return getAverPrice(shoppingReceipt)/getGoodAcounts(shoppingReceipt);
}
}