最近做了个项目需要从一段字符串中提取出关键的信息,并拿出来使用。相当于张三进了一个无人超市对机器人说:帮我拿一瓶可口可乐,谢谢!!! 这句话有很多种说法,又比如:给我来一瓶可乐,但不管张三怎么说可乐这个商品是不会变得,如果变了,就又变成买别的东西了。所以我们要抓住可乐这个重要的元素,把这个元素提取出来,让机器人去拿和计算价格。
下面就开始做正事了
1.首先要先创建一个集合,把商品放入集合里面,考虑到商品名称是不会重复的,所以使用set集合
//商品集合
private static final Set<String> shopType = Stream.of(
"可乐", "雪碧", "百岁山", "农夫山泉", "冰红茶", "绿茶", "芬达", "脉动",
"王老吉", "今麦郎", "哇哈哈"
).collect(Collectors.toSet());
2.现在集合已经创建完成了,接下来就要通过这个集合去对比用户说的话 看看有没有用户说的商品,如果有就把商品的名称给提取出来并返回
//判断用户说的商品是否存在
private static Set<String> getShoesType (String message){
Set<String> clothesTypeSet = shopType.stream()
.filter(clothesType -> message.contains(clothesType)).collect(Collectors.toSet());
return clothesTypeSet;
}
3.最后一步,在方法中调用
public static void main(String[] args) {
String me = "我想买瓶百岁山";
Set shopName = getShoesType(me);
System.out.println(shopName);
String mes = "我想买瓶";
Set shopNames = getShoesType(mes);
System.out.println(shopNames);
}
4.执行方法后控制台显示如下

使用正则表达式匹配手机号
1、写一个匹配手机号的方法
public static String getPhone(String remark){
Pattern pattern = Pattern.compile("((13[0-9])|(14[5-9])|(15([0-3]|[5-9]))|(16[6-7])|(17[1-8])|(18[0-9])|(19[1|3])|(19[5|6])|(19[8|9]))\\d{8}");
Matcher matcher = pattern.matcher(remark);
//匹配到的所有手机号,取第一条
if (matcher.find()) {
return matcher.group();
}
//匹配所有手机号,保存在数组中,可根据数组下标选择
List list = new ArrayList();
while (matcher.find()) {
list.add(matcher.group());
}
System.out.println(list);
return null;
}
2、单元测试
public static void main(String[] args) {
String str1 = "阿斯顿19167876787撒旦阿斯顿18767876787撒旦22";
String phone = getPhone(str1);
System.out.println(phone);
}
本文介绍了一种从用户输入的自由文本中提取特定商品名称的方法,通过使用Java的集合和流API,实现了对商品名称的有效识别。同时,文章还分享了如何利用正则表达式匹配手机号码的技术细节。
1万+

被折叠的 条评论
为什么被折叠?



