>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 22834 个阅读者 刷新本主题
 * 贴子主题:  正则表达式【匹配非字母和数字】 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2021-08-01 07:37:42     消息  查看  搜索  好友  邮件  复制  引用

使用java的正则匹配之前要记得导包

import java.util.regex.Matcher;
import java.util.regex.Pattern;


1.使用正则判断是否有数字、字母
public static void main(String[] args) {
        System.out.println(containsNum("111"));
        System.out.println(containsLetter("aaa"));
        System.out.println(containsNumOrLetter("aaa"));
    }
//判断是否含有字母
    public static boolean containsLetter(String str) {
        String patt="";
        Pattern r = Pattern.compile(patt);
        Matcher matcher = r.matcher(str);
        return matcher.find();
    }
//判断是否含有数字
    public static boolean containsNum(String str) {
        String patt="[0-9]";
        Pattern r = Pattern.compile(patt);
        Matcher matcher = r.matcher(str);
        return matcher.find();
    }
//判断是否含有数字或字母
    public static boolean containsNumOrLetter(String str) {
        String patt="[0-9|a-z|A-Z]";
        Pattern r = Pattern.compile(patt);
        Matcher matcher = r.matcher(str);
        return matcher.find();
    }

2.那如果是判断是不含有字母或数字的正则怎么写呢?

   public static void main(String[] args) {
        System.out.println(containsNoNum("111"));
        System.out.println(containsNoLetter("aaa"));
        System.out.println(containsNoNumOrLetter("aaa"));
    }

    public static boolean containsNoLetter(String str) {
        String patt="[^a-z]";
        Pattern r = Pattern.compile(patt);
        Matcher matcher = r.matcher(str);
        return matcher.find();
    }

    public static boolean containsNoNum(String str) {
        String patt="[^0-9]";
        Pattern r = Pattern.compile(patt);
        Matcher matcher = r.matcher(str);
        return matcher.find();
    }

    public static boolean containsNoNumOrLetter(String str) {
        String patt="[^0-9|a-z|A-Z]";
        Pattern r = Pattern.compile(patt);
        Matcher matcher = r.matcher(str);
        return matcher.find();
    }

3.根据上面的正则来写一个比较版本号的方法


    public static void main(String[] args) {
        System.out.println(compareVersion("1.3_bc", "1.3_b"));
    }


    public static String compareVersion(String version1, String version2) {

        //忽略大小写,只保留数字和字母和点
        String v1 = version1.toLowerCase().replaceAll("[^0-9|a-z|.]", "");
        String v2 = version2.toLowerCase().replaceAll("[^0-9|a-z|.]", "");
        //按点来切割
        String[] arr1 = v1.split("\\.");
        String[] arr2 = v2.split("\\.");
        int len = arr1.length > arr2.length ? arr2.length : arr1.length;

        //正则判断是否含有字母
        String patt = "";
        Pattern r = Pattern.compile(patt);
        int i = 0;
        do {
            Matcher m1 = r.matcher(arr1[i]);
            Matcher m2 = r.matcher(arr2[i]);

            boolean flag = false;
            //判断是否含有字母
            if (m1.find() && m2.find()) {//如果都含有字母
                //先比较数字
                String num1 = arr1[i].substring(0, m1.start());
                String num2 = arr2[i].substring(0, m2.start());
                if (Integer.parseInt(num1) > Integer.parseInt(num2)) {
                    return version1;
                } else if (Integer.parseInt(num1) < Integer.parseInt(num2)) {
                    return version2;
                }
                //再比较含有字母的字符串
                String str1 = arr1[i].substring(m1.start());
                String str2 = arr2[i].substring(m2.start());
                if (str1.compareTo(str2) > 0)
                    return version1;
                else if (str1.compareTo(str2) < 0)
                    return version2;
            } else if ((flag = m1.find()) || m2.find()) {//如果只是其中一个含有字母
                String vContains = flag ? arr1[i] : arr2[i];
                String vOther = flag ? arr2[i] : arr1[i];
                //先比较数字
                String num1 = vContains.substring(0, flag ? m1.start() : m2.start());
                String num2 = vOther;
                if (Integer.parseInt(num1) > Integer.parseInt(num2)) {
                    return version1;
                } else if (Integer.parseInt(num1) < Integer.parseInt(num2)) {
                    return version2;
                }
                return flag ? version1 : version2;
            } else {//如果都不含有字母,则直接比较数字
                if (Integer.parseInt(arr1[i]) > Integer.parseInt(arr2[i])) {
                    return version1;
                } else if (Integer.parseInt(arr1[i]) < Integer.parseInt(arr2[i])) {
                    return version2;
                }
            }
        } while (++i < len);

        //以上判断都没有结果则返回数组 长度较长的那个版本
        return arr1.length > arr2.length ? version1 : version2;
    }

————————————————
原文链接:https://blog.csdn.net/a_hui_tai_lang/article/details/81350422


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->类的生命周期
  JavaWeb开发-->使用过滤器
  JSP与Hibernate开发-->立即检索和延迟检索策略
  Java网络编程-->用Axis发布Web服务
  精通Spring-->Vue组件开发基础
  Vue3开发-->通过Axios访问服务器
  套接字通信:select、poll、epoll的区别
  整理收集的一些常用java工具类
  Java虚拟机(JVM)参数配置说明
  Java关键字final、static使用总结
  最实用的10个重构小技巧排行榜,你都用过哪些?
  深入分析synchronized实现原理
  Java读取大文件的高效率实现_java大文件
  Java设计模式:解释器模式
  Java虚拟机(JVM)的内存结构
  Java入门实用代码:获取远程文件大小
  Java入门实用代码:获取本机IP地址及主机名
  Java入门实用代码:集合转数组
  Java入门实用代码:打印九九乘法表
  史上最全正则表达式合集(马上收藏)
  java使用gzip实现文件解压缩示例
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。