这个StringTokenizer
是个分析类
使用他的构造函数,可以直接截取字符
构造StringTokenizer fenxi = new StringTokenizer("you#*are*##welcome", "#*")
如果指定 # 和 * 是分割符,那么字符 #* 的任意排列都是分割符
you***#are*#*#welcom 也是3个单词
对象可以使用nextToken()
方法逐个获取被截取的字符串
我们可以在while
中使用函数hasMoreTokens()
,只要还有截取的字符串,就能继续循环
对象自身有一个计数器,获得被截取的字符串个数,每调用一次nextToken()
,计数减一
import com.sun.jdi.event.StepEvent;
import java.util.StringTokenizer;
class PriceToken
{
// 获得价钱总价
public double getPriceSum(String shoppingReceipt)
{
String regex = "[^0123456789.]+";
shoppingReceipt = shoppingReceipt.replaceAll(regex, "#"); // 将字符串中的所有非数字字符转化为#
StringTokenizer fenxi = new StringTokenizer(shoppingReceipt, "#"); // 以#为序列分割
double sum = 0;
while (fenxi.hasMoreTokens()) // 只要还存在被截取的字符序列
{
String item = fenxi.nextToken();
double price = Double.valueOf(item);
sum = sum + price;
}
return sum;
}
// 获得物品数
public int getGoodsAmount(String shoppingReceipt)
{
String regex = "[^0123456789.]+";
shoppingReceipt = shoppingReceipt.replaceAll(regex, "#");
StringTokenizer fenxi = new StringTokenizer(shoppingReceipt, "#");
int amount = fenxi.countTokens(); // 计数,看被截取了多少个序列
return amount;
}
// 获得平均值
public double getAverPrice(String shoppingReceipt)
{
double priceSum = getPriceSum(shoppingReceipt);
int goodsAmount = getGoodsAmount(shoppingReceipt);
return priceSum / goodsAmount;
}
}
public class test
{
public static void main(String[] args)
{
String shoppingReceipt = "牛奶:8.5元,香蕉:3.6元,酱油:2.8元";
PriceToken lookPriceMess = new PriceToken();
System.out.println(shoppingReceipt);
double sum = lookPriceMess.getPriceSum(shoppingReceipt);
String Sum = String.format("%.2f", sum);
System.out.println("购物总价:" + Sum);
int amount = lookPriceMess.getGoodsAmount(shoppingReceipt);
double aver = lookPriceMess.getAverPrice(shoppingReceipt);
String Aver = String.format("%.2f", aver);
System.out.println("总共"+ amount + "个物品," + "平均价格:" + Aver);
}
}
public class test
{
public static void main(String[] args)
{
String shoppingReceipt = "牛奶:8.5元,香蕉:3.6元,酱油:2.8元";
String rec = "[^0123456789.]+";
shoppingReceipt = shoppingReceipt.replaceAll(rec, "#");
StringTokenizer fenxi = new StringTokenizer(shoppingReceipt, "#");
for(int i = 0;i < 3;i++)
{
String s = fenxi.nextToken();
System.out.println(s);
System.out.println("被截取的字符串还有" + fenxi.countTokens() + "个");
}
}
}