Java在内存中做String类型字段的模糊查询/模糊匹配

目录

方法一:String的contains方法

方法二:正则表达式

方法三:String的indexOf方法

代码示例


方法一:String的contains方法

这个是String自带的子串匹配方法,其实其内里实现就是方法三,下面详细讲。

方法二:正则表达式

几个方法的定义与使用

Pattern.compile():Pattern构造器是私有的,不能通过new创建Pattern对象,可以通过Pattern调用静态方法compile返回Pattern实例,其内部实现是new Pattern(regex, 0)。

Pattern.complie(String regex,int flag):它接收一个标记参数,调整匹配行为。regex 表示定义的规则。flag 表示设置的参数类型,主要包含以下几种情况。

    • Pattern.CASE_INSENSITIVE(?i) 默认情况下,大小写不明感的匹配只适用于US-ASCII字符集。让表达式忽略大小写进行匹配。
    • Pattern.COMMENTS(?x) 此种模式下,匹配时会忽略表达式中空格字符(表达式里的空格,tab,回车)。注释从#开始,一直到这行结束。
    • Pattern.UNIX_LINES(?d) 此种模式下,只有’\n’才被认作一行的中止,并且与’.’,’^’,以及’$’进行匹配。
    • Pattern.MULTILINE(?m) 此种模式下,上箭头和单引号分别匹配一行的开始和结束。此外,’^‘仍然匹配字符串的开始,’’也匹配字符串的结束。默认情况下,这两个表达式仅仅匹配字符串的开始和结束。
    • Pattern.DOTALL:此种模式下,表达式’.‘可以匹配任意字符,包括表示一行的结束符。默认情况下,表达式’.'不匹配行的结束符。

matcher.find()和 matcher.matches()的区别:find()方法是部分匹配,是查找输入串中与模式匹配的子串,如果该匹配的串有组还可以使用group()函数。matches()是全部匹配,是将整个输入串与模式匹配,如果要验证一个输入的数据是否为数字类型或其他类型,一般要用matches()。

方法三:String的indexOf方法

indexOf方法:返回指定字符str在字符串中(方法调用者)第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1。

因此,如果待匹配字符串在目标字符串中存在的话,那么indexOf方法的返回值一定大于0。

代码示例

public class StringFuzzyTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        list.add("liliu");

        String keyword = "li";

        List<String> answer1 = new ArrayList<>();

        answer1.addAll(list.stream().filter(one -> one.contains(keyword)).collect(Collectors.toList()));

        System.out.println("1. String的contains方法");
        answer1.forEach(System.out::println);

        List<String> answer2 = new ArrayList<>();

        Pattern regex = Pattern.compile(keyword);
        answer2.addAll(list.stream().filter(one -> regex.matcher(one).find()).collect(Collectors.toList()));

        System.out.println("2. 正则表达式");
        answer2.forEach(System.out::println);

        List<String> answer3 = new ArrayList<>();

        answer3.addAll(list.stream().filter(one -> one.indexOf(keyword) > -1).collect(Collectors.toList()));

        System.out.println("3. String的indexOf方法,大于-1说明找得到");
        answer3.forEach(System.out::println);

    }
}

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值