首页 文章 精选 留言 我的

精选列表

搜索[Java],共10000篇文章
优秀的个人博客,低调大师

java学习笔记--简单掌握正则表达式

正则表达式: 主要用于操作字符串的规则 用于检索替换那些符合规定的文本 预定义字符 . 任何字符 . 就单纯代表. \d是 数字 \D 非数字 \s 空白字符 包括\t \n \r \S 非空白字符 \w 单词字符 比如 a—z A-Z _还有0到9 \W 非单词字符 如果预定义字符没有加上数量词 那就只能匹配一个字符 数量词: ? 一次或者一次也没有 * 0次或者多次 + 1次或者多次 {n}恰好n次 {n,} 至少n次 {n,m} 至少n次,但是不超过m次 范围词: 没有数量词就只能匹配一个字符 [abc] 在abc内 [^abc] 除了abc外 [a-zA-Z] a到z或者A到Z 两头字母包括在内 [a-d[m-p]]a到d或者m到p 并集 [a-d&&[def]] 交集 匹配功能 举个例子: String match="1[12a]\\d{2}"; System.out.println(number.matches(match)?"ok":"flase");//number是被匹配的字符串 意思就是第一个为1 第二个为1或2或a 接下来的为数字并且有且只有两个 再举例: String match="a\\d{0,2}[a]{2}"; 第一个为a 第二个开始后0个到2个内必须为数字 剩下的两位必须为a 数量词如{2} 必须跟范围词或者预定义符后面有效 是对这两个的修饰 切割功能 举例:根据空格来对字符串进行切分 String str = "aa.bb.cc"; str = "-1 99 4 23"; String[] arr = str.split(" +"); //+这里代表一个或者多个空格 再举例:根据重叠词进行切割 String str = "sdqqfgkkkhjppppkl"; String[] arr = str.split("(.)\\1+"); 注意:为了提高规则复用,用()进行封装,每一个括号都有一个编号,从1开始,为了复用这个规则。可以通过编号来完成该规则的调用。需要对编号数字进行转义。\1就代表获取1组规则。 等于说 第一次获得s 然后\1引用 变成ss+ 无法切割 然后下一个 替换: String name="wocao141311164sdfsdf1232"; String reg="1[2345]\\d{3}"; String aa=name.replaceAll(reg, "****"); //将满足条件的内容替换成****格式 替换重复的 String name="wo我洗爱你你你"; String reg="(.)\\1+"; String aa=name.replaceAll(reg,"$1"); 如果需要在replaceAll方法正则的时候外部引用组的内容 要使用$组号 查找: 范例: Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches(); **注意:步骤: 1,先将正则表达式编译成正则对象。使用的是Pattern类一个静态的方法。compile(regex); 2,让正则对象和要操作的字符串相关联,通过matcher方法完成,并返回匹配器对象(Matcher)。 3,通过匹配器对象的方法将正则模式作用到字符串上对字符串进行针对性的功能操作** 查找三个的单词 String str = "da jia zhu yi le,ming tian bu fang jia,xie xie!"; String reg="\\b[a-zA-Z]{3}\\b"; Pattern pattern=Pattern.compile(reg); Matcher matcher= pattern.matcher(str); while(matcher.find()) { System.out.println(matcher.group()); } 先find(寻找有没有满足的 然后下移位置)才可以group(得到满足条件的字符串) \b是边界词 不匹配 只表示开始和结束 匹配emil: String str = "123sdfsd@sin.com.cn"; true str="1@1.1"; false String reg="[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+"; System.out.println(str.matches(reg)); 网络爬虫:emil String content="有事没事联系:112312@12.com 又是没事士大夫似的说的说的1211112312@22.cn1211dfsd1@22.cn.com"; String reg="[a-zA-Z1-9]\\w{5,7}@[a-zA-Z0-9]{2,}(\\.(com|cn|net)){1,2}"; Matcher matcher= pattern.matcher(content); while(matcher.find()) { System.out.println(matcher.group()); } 我认为的重点: \b 熟悉: 匹配的是位置 \b 匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在) \w String str = "sshello world"; String reg="hello\\b"; Pattern pattern=Pattern.compile(reg); Matcher matcher= pattern.matcher(str); while(matcher.find()) { String name=matcher.group(); System.out.println(name); } 抽象出来直接看区别: **String str = “sshello world”; String reg=”hello\b”;** 返回hello 分析: 以hello结尾 **String str = “ss hello,world”; String reg=”\bhello”;** 返回hello 分析: 以hello开头 就用 “It’s a nice day today.” 举例说明: 正确的正则:\bnice\b 分析:第一个 \b 前面一个字符是空格,后面一个字符是 ‘n’,不全是 \w, 所以可以匹配出 ‘n’ 是一个单词的开头。第二个 \b 前面一个字符是 ‘e’, 后面一个字符是空格,不全是 \w,可以匹配出 ‘e’ 是一个单词的结尾。 所以,合在一起,就能匹配出以 ‘n’ 开头以 ‘e’ 结尾的单词, 这里就能匹配出 “nice” 这个单词。 举例: String str = “ss shello world”; String reg=”hello\b w”; 返回hello w 分析: 以hello结尾 空格w开始 的内容 String str = “ss shello world”; String reg=”hello\bw”; 失败 分析: hello后面跟着w 违反了\b前后不能同时为\w所以匹配不到 reg就写错了 String str = “ss shello,world”; String reg=”hello\b.w”; 返回 hello,w 虽然.是任何字符都行 但是还是要根据str来判断 如文中 ,不是\w所以可以匹配到 如果是String str = “ss shellosworld”; 则无法匹配到

优秀的个人博客,低调大师

PathMatchingResourcePatternResolver通过适配符寻找符合条件的java

项目中,有时需要通过特定的字符寻找特定的类,如mybatis,可以通过适配符寻找要扫描的目录。 我们自己也可以通过适配符寻找到自己想要的类,具体代码如下: /** * 通过包名获取class * * @author starmaark * @version 2018年4月12日 下午5:55:18 */ public class ClassTools { private static final Logger log = LoggerFactory.getLogger(ClassTools.class); private static final String RESOURCE_PATTERN = "/**/*.class"; public static Set<Class<?>> findPathMatchingResources(String locationPattern) { // 第一个class类的集合 Set<Class<?>> classes = new LinkedHashSet<Class<?>>(); try { String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(locationPattern) + RESOURCE_PATTERN; ResourcePatternResolver resourceLoader = new PathMatchingResourcePatternResolver(); Resource[] source = resourceLoader.getResources(pattern); MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(resourceLoader); //System.out.println("length:" + source.length); for (Resource resource : source) { if (resource.isReadable()) { MetadataReader reader = readerFactory.getMetadataReader(resource); String className = reader.getClassMetadata().getClassName(); classes.add(Class.forName(className)); } } }catch (Exception e){ log.error("寻找符合条件的包失败",e); } return classes; } } OK,上述代码执行成功!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册