精华内容
下载资源
问答
  • java 字符串模糊匹配

    万次阅读 2014-10-17 17:45:03
    java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现. Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接...Java代码示例: Pattern p=Pattern.compile("\\w
    java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现. Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式,
    Java代码示例: Pattern p=Pattern.compile("\\w+");
    p.pattern();//返回 \w+ 

    pattern() 返回正则表达式的字符串形式,其实就是返回Pattern.complile(String regex)的regex参数

    1、Pattern.split(CharSequence input)
     Pattern有一个split(CharSequence input)方法,用于分隔字符串,并返回一个String[].
    Java代码示例:
    Pattern p=Pattern.compile("\\d+");
    String[] str=p.split("TestPattern97Matcher"); 
    结果:str[0]="TestPattern" str[1]="Matcher"

    2、Pattern.matcher(String regex,CharSequence input)是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串.
    Java代码示例:
    Pattern.matches("\\d+","2223");//返回true
    Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到
    Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到 

    3、Pattern.matcher(CharSequence input)
    Pattern.matcher(CharSequence input)返回一个Matcher对象.
    Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例.
    Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持.
    Java代码示例:
    Pattern p=Pattern.compile("\\d+");
    Matcher m=p.matcher("22bb23");
    m.pattern();//返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的 

    4、Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()
    Matcher 类提供三个匹配操作方法,三个方法均返回boolean类型,当匹配到时返回true,没匹配到则返回false

    matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true
    Pattern p=Pattern.compile("\\d+");
    Matcher m=p.matcher("22bb23");
    m.matches();//返回false,因为bb不能被\d+匹配,导致整个字符串匹配未成功.
    Matcher m2=p.matcher("2223");
    m2.matches();//返回true,因为\d+匹配到了整个字符串 

    在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配
    即Pattern.matcher("\\d+","22bb23")与 Pattern.compile("\\d+").matcher("22bb23").matches()  等价

    lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true
    Pattern p=Pattern.compile("\\d+");
    Matcher m=p.matcher("22bb23");
    m.lookingAt();//返回true,因为\d+匹配到了前面的22
    Matcher m2=p.matcher("aa2223");
    m2.lookingAt();//返回false,因为\d+不能匹配前面的aa 

    find()对字符串进行匹配,匹配到的字符串可以在任何位置.
    Pattern p=Pattern.compile("\\d+");
    Matcher m=p.matcher("22bb23");
    m.find();//返回true
    Matcher m2=p.matcher("aa2223bb");
    m2.find();//返回true
    Matcher m3=p.matcher("aabb");
    m3.find();//返回false 

    find(int start) 从指定索引开始匹配
    Pattern p=Pattern.compile("\\d+");
    Matcher m=p.matcher("aa2223bb");
    m.find(5); // 返回true
    m.find(6); // 返回false

    5、Mathcer.start()/ Matcher.end()/ Matcher.group()
    当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.
    start()返回匹配到的子字符串在字符串中的索引位置.
    end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
    group()返回匹配到的子字符串
    Pattern p=Pattern.compile("\\d+");
    Matcher m=p.matcher("aaa2223bb");
    m.find();//匹配2223
    m.start();//返回3
    m.end();//返回7,返回的是2223后的索引号
    m.group();//返回2223 
    Mathcer m2=m.matcher("2223bb"); 
    m.lookingAt();   //匹配2223 
    m.start();   //返回0,由于lookingAt()只能匹配前面的字符串,所以当使用lookingAt()匹配时,start()方法总是返回0 
    m.end();   //返回4 
    m.group();   //返回2223
    Matcher m3=m.matcher("2223bb"); 
    m.matches();   //匹配整个字符串 
    m.start();   //返回0,原因相信大家也清楚了 
    m.end();   //返回6,原因相信大家也清楚了,因为matches()需要匹配所有字符串 
    m.group();   //返回2223bb
    

    start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组.
    Pattern p=Pattern.compile("([a-z]+)(\\d+)");
    Matcher m=p.matcher("aaa2223bb");
    m.find();   //匹配aaa2223
    m.groupCount();   //返回2,因为有2组
    m.start(1);   //返回0 返回第一组匹配到的子字符串在字符串中的索引号
    m.start(2);   //返回3
    m.end(1);   //返回3 返回第一组匹配到的子字符串的最后一个字符在字符串中的索引位置.
    m.end(2);   //返回7
    m.group(1);   //返回aaa,返回第一组匹配到的子字符串
    m.group(2);   //返回2223,返回第二组匹配到的子字符串 

    现在我们使用一下稍微高级点的正则匹配操作,例如有一段文本,里面有很多数字,而且这些数字是分开的,我们现在要将文本中所有数字都取出来,利用java的正则操作是那么的简单.
    Java代码示例:
    Pattern p=Pattern.compile("\\d+");
    Matcher m=p.matcher("我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com");
    while(m.find()) {
         System.out.println(m.group());
    }
    
    输出:
    456456
    0532214
    123

    如将以上while()循环替换成
    while(m.find()) {
         System.out.println(m.group());
         System.out.print("start:"+m.start());
         System.out.println(" end:"+m.end());
    } 
    则输出:
    456456
    start:6 end:12
    0532214
    start:19 end:26
    123
    start:36 end:39

    现在大家应该知道,每次执行匹配操作后start(),end(),group()三个方法的值都会改变,改变成匹配到的子字符串的信息,以及它们的重载方法,也会改变成相应的信息.

    注意:只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用.


    文章参考 :http://blog.csdn.net/kofandlizi/article/details/7323863


    展开全文
  • 当前的情况是:只做了一个4个关键词的场景匹配功能,是通过java代码循环工单,再循坏所有场景,把每个场景的关键词和工单内容进行匹配的方式,我觉得这样不好,代码写的非常死,求一个更好的方案
  • java】从Map中模糊匹配key值

    千次阅读 2019-05-10 16:55:21
    如果我们想要从一个map集合中,模糊筛选出我们想要的key的集合应该如何处理呢?下面一个小例子解决此问题,但是性能上有待提高: 核心代码: /** * 从map中查询想要的map项,根据key */ public static Map<...

    如果我们想要从一个map集合中,模糊筛选出我们想要的key的集合应该如何处理呢?下面一个小例子解决此问题,但是性能上有待提高:

    核心代码:

    /**
     * 从map中查询想要的map项,根据key
     */
    public static Map<String, Object> parseMapForFilter(Map<String, Object> map,String filters) {
        if (map == null) {
            return null;
        } else {
            map = map.entrySet().stream()
                    .filter((e) -> checkKey(e.getKey(),filters))
                    .collect(Collectors.toMap(
                            (e) -> (String) e.getKey(),
                            (e) -> e.getValue()
                    ));
        }
        return map;
    }
    
    /**
     * 通过indexof匹配想要查询的字符
     */
    private static boolean checkKey(String key,String filters) {
        if (key.indexOf(filters)>-1){
            return true;
        }else {
            return false;
        }
    }

    此代码通过entryset进行遍历,找出其中可以匹配的项目,然后再重新collect成我们想要的map,示例:

    public static void main(String[] args){
        Map<String,Object> params = new HashMap<>(16);
        params.put("a-1","1");
        params.put("a-2","2");
        params.put("a-3","3");
        params.put("b-1","1");
        params.put("b-2","2");
        params.put("b-3","3");
        params.put("c-1","1");
        params.put("c-2","2");
        params.put("c-3","3");
    
        Map<String, Object> a = parseMapForFilter(params, "a");
        System.out.println(JSON.toJSONString(a));
    
    }

    结果:

    展开全文
  • ”实现中间模糊匹配代码: public class Test { public static void main(String[] args) { String str="总会在某一个回眸的时刻醉了流年,濡湿了柔软的心.总会有某一个回眸的时刻醉了流年,濡湿了柔软...

    使用“.+?”实现中间模糊匹配的代码:

    public class Test {
     
        public static void main(String[] args) {
            String str="总会在某一个回眸的时刻醉了流年,濡湿了柔软的心.总会有某一个回眸的时刻醉了流年,濡湿了柔软的心";
            str=str.replaceAll("总会在.+?流年", "总会有某一个回眸的时刻醉了流年");
            System.out.println(str);
        }
     
    }

    注:只能模糊匹配中间不确定的字符串

    转载于:https://www.cnblogs.com/longronglang/p/9426949.html

    展开全文
  • java字典树(Trie)实现中文模糊匹配

    千次阅读 2018-12-16 03:15:50
    原理解释: java实现:https://blog.csdn.net/yuhk231/article/details/51539840 c实现:...代码模板:缺点,只能检索出在一个分支中的前缀匹配内容 package com.xq.algorithm; import java.io.B...

    原理解释:
    java实现:https://blog.csdn.net/yuhk231/article/details/51539840
    c实现:https://blog.csdn.net/qq_31175231/article/details/77827324
    代码模板:缺点,只能检索出在一个分支中的前缀匹配内容

    package com.xq.algorithm;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
     
    /*
     * 无数据结构设计下的蛮力中文键树
     */
    class TrieNode {
    	public String value;
    	public ArrayList<TrieNode> ptr = null;
    	public TrieNode(String value) {
    		this.value=value;
    		ptr =new ArrayList<TrieNode>();
    	}
    }
     
    public class TrieTree_1 {
    	private static TrieNode root = null;
    	ArrayList<String> searchResult=new ArrayList<String>();
    	StringBuffer tempWord=new StringBuffer();
    	int start=0;
    	
    	public TrieTree_1() {
    		root = new TrieNode(null);
    	}
    	
    	public void insert(String key) {
    		TrieNode p = root;
    		String tempWord;
    		boolean contains;
    		TrieNode tempNode;
    		for (int i = 0; i < key.length(); i++) {
    			tempWord=String.valueOf(key.charAt(i));
    			contains=false;
    			for(TrieNode tn:p.ptr){
    				if(tn.value.equals(tempWord)){
    					p=tn;
    					contains=true;
    					break;
    				}
    			}
    			if(!contains){
    				tempNode=new TrieNode(tempWord);
    				p.ptr.add(tempNode);
    				p=tempNode;
    			}
    		}
    	}
    	
    	public ArrayList<String> search(String key) {  //模糊查询就是这个方法,打个比方比如key是"ap",那么ArrayList里就有{"apple","application"}
    		TrieNode p = root;
    		String temp;
    		boolean contains=false;
    		for (int i = 0; i < key.length(); i++) {
    			temp=String.valueOf(key.charAt(i));
    			contains=false;
    			for(TrieNode tn:p.ptr){
    				if(tn.value.equals(temp)){
    					p=tn;
    					contains=true;
    					break;
    				}
    			}
    			if(contains){
    				continue;
    			}else{
    				break;
    			}
    		}
    		if(contains){
    			if(!(p.ptr.isEmpty())){
    				//查找到关键字
    				searchResult.clear();
    				tempWord.delete(0, tempWord.length());
    				tempWord.append(key);
    				start=key.length();
    				traverseTree(p);
    			}else{
    				//已经查找到键树的底部
    				return null;
    			}
    		}else{
    			//没有查找到相应关键字
    			return null;
    		}
    		return searchResult;
    	}
    	
    	private void traverseTree(TrieNode p){
    		if(!(p.ptr.isEmpty())){
    			for(TrieNode tn:p.ptr){
    				tempWord.append(tn.value);
    				start++;
    				traverseTree(tn);
    				start--;
    				tempWord.delete(start,tempWord.length());
    			}
    		}else{
    			searchResult.add(tempWord.toString());
    		}
    	}
    	public static void main(String[] args) {
    		TrieTree_1 chinese = new TrieTree_1();
    		chinese.insert("中");
    		chinese.insert("中国人");
    		chinese.insert("中国");
    		chinese.insert("中华人民");
    		chinese.insert("中华人崛起");
    		chinese.insert("中华上下五千年");
    		ArrayList<String> list = chinese.search("中华");
    		for (String string : list) {
    			System.out.println(string);
    		}
    	}
    }
    
    
    展开全文
  • 模糊匹配: 如何实现? 开启智能提示 window->preferences->java->Editor 将auto activation中的Auto activation triggers for java 中的值设置为 .qwertyuiopasdfghjklzxcvbnm.{[( 这个设置...
  • java实现模糊搜索算法

    2020-08-15 12:55:40
    java实现模糊搜索算法介绍代码 介绍 这里说的模糊查询不是sql中like的效果,是相当于lucene中的FuzzyQuery效果。 比如:搜索值是"hella",匹配的数据是"hello",则模糊度为1匹配上该数据。 代码 算法: public ...
  • JPQL模糊匹配单个字符

    2017-07-31 18:23:00
    JPQL模糊匹配,不是%,而是单个字符,该怎么办?比如我要查出数据库中满足后三位是数字的字符串 对于mysql来说,使用通配符 %和_可以轻松解决,但是对于JPQL来说模糊查询就伤脑筋了。。。 有一个方法,可以使用...
  • 工具类功能:会递归查找所有子文件夹,代码统计,模糊匹配等,指定文件统计,文件大小统计 1 指定文件夹,代码行数统计,调用示例: //统计指定文件夹.java,.js文件的代码行数,各候后缀的文本数量 HowManyLine ...
  • 对List集合进行模糊匹配、过滤

    千次阅读 2019-09-04 16:52:53
    今天工作需要写了一个模糊匹配List的工具类,根据模糊字段返回符合条件的对象集合,有需要的朋友可以参考一下。代码如下: package com.aheagle.nztrp.util; import java.lang.reflect.Field; import java.util....
  • 什么是模糊字符串匹配 Fuzzy-string-match是用于ruby的模糊字符串匹配库。 很快(用RubyInline用C编写) 它仅支持Jaro-Winkler距离算法。 该程序是从Lucene 3.0.2手动移植的。 (lucene是Java产品) 如果要添加...
  • Jedis Redis 模糊匹配 取得 key 列表

    万次阅读 2018-05-11 17:42:41
    往Redis中初始化几条测试数据:china:beijingchina:shandong:hezechina:shandong:jinan 测试代码: Java代码 Jedis jedis = new Jedis("10.110.20.152", 6379); Set&lt;String&gt; set...
  • Java实现IP动态匹配

    2021-03-10 16:01:46
    文章目录Java实现IP动态匹配需求描述分析设计普通思路分析前缀树思路分析代码实现测试用例小结 需求描述 有些时候处于安全考虑,我们需要在系统访问路径或者功能操作上面增加一些权限管控。其中一个比较简单的方案...
  • 方法一:select * from [table] where lower(name) like lower('%val%');...table:表名name:查询列名val:列名匹配值二选一即可,测试方法通过 方法二:在数据库打开链接的时候执行一次ALTER SESSION SET ...
  • 数据库查询中,我们是这样进行模糊匹配的: select * from user where 1=1 and username like '%林%' limit 0,20 理所当然的,在java代码中你会这么写: select * from user where 1=1 and username like...
  • 要同时删除不多的几个文件,不想再判断OS再用delete还是sudo rm,想写个通用的。搜了下g,正巧找到了。 [code="java"] ...import java.io.File;... 代码 说明 . 匹配除换行符以外...
  • 在工作中遇到一个需求是通过导入固定格式的excel来和数据库数据进行模糊匹配,符合条件的可以通过,不符合条件的就不通过,解决代码: 首先要导入上传文件的jar: &amp;lt;dependency&amp;gt; &amp;...
  • java范例开发大全源代码

    热门讨论 2011-10-30 23:31:51
     实例37 数组元素类型不匹配异常(ArrayStoreException) 56  实例38 强制类型转换异常(ClassCastException) 56  实例39 索引越界异常(IndexOutOfBoundsException) 57  实例40 空指针异常...
  • 这个也是在现实科研中的需求,看似简单,实际上...上篇博客中,由于有命令空间(namespace)的存在,所以用了模糊匹配的方法,这里我们参考其他朋友的方法:https://blog.csdn.net/weixin_45069542/article/details/902
  • HowManyLine.java

    2019-09-25 20:56:37
    字符查找,代码统计,代码查询,模糊匹配代码定位,代码行数累计工具类
  • 任务:在数据湖场景中,通过对大数据集信息的发现,结合索引优化,模糊匹配等相关技术,对给定的条件,快速过滤并准确计算出满足条件的记录行的总数。 出题单位:阿里云 赛题简介 本赛题背景是目前大数据研究热点...
  • .java编写库关键字搜索----针对js等库

    千次阅读 2012-07-15 15:33:07
    因为javascript的函数定义方法不像java C++等语言有固定的语法,可以模糊匹配 .. 对于js这样的 函数只能通过关键字搜索代码如下 直接 javac java就可以运行   import java.io.File; import java.io.FileInputS
  • MongoDB的模糊查询

    千次阅读 2014-05-13 21:25:48
    MongoDB的模糊查询  ...要进行模糊匹配只能借助于正则表达式 Java代码:  Mongo m=new Mongo();   DB db=m.getDB("UserDB");   DBCollection collec
  • 该项目的动机是在数据分析和数据科学工作中经常需要模糊匹配(近似字符串匹配)算法。 中缺少这些算法。 许多项目没有时间、许可或预算来安装其他 SQL Server 包,例如 。 此外,最好通过程序代码来完成尽可能多的...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 133
精华内容 53
关键字:

java代码模糊匹配

java 订阅