• 正则表达式


    1. 正则表达式: 即通过一些特定的符号操作字符串数据
    2. 特点: 简化了书写,但是阅读性较差
    3. 位于 java.util.regex 包中

    匹配规则

    正则表达式对字符的常见操作

    // 1. 匹配,
        // 其实使用的就是 String 类中的 matches(String regex) 方法
    
    // 2. 切割
        // 其实使用的就是 String 类中的 split 方法
    
        // 示例一
            String str = "zhangsan.xiaoqiang.zhaoliu";
    
            String[] name = str.split("\.")  //  其中 \ 是对  进行转义
    
        // 示例二
            String str = "zhangsanttttxiaoqiangmmmmmzhaoliu";
    
            String[] name = str.split("(.)\1+");  // 正则中的封装使用 (),
                                                  // tttt 中第二个字符复用第一个字符
    
    // 3. 替换
        // 其实使用的就是 String 类中的 replaceAll(String regx, String replacement) 方法
    
        // 示例一: 将字符串中的叠词替换为一个
            String str = "zhangsanttttxiaoqiangmmmmmzhaoliu"
    
            str = str.replaceAll("(.)\1+","$1");  // $ 表示引用正则表达式中的第一组内容
    
    // 4. 获取
        //  正则表达式对应的类 Pattern
        // 4.1 首先将正则规则封装成对象
        // 4.2 通过正则对象得到 Matcher(匹配器) 对象
        // 4.3 通过匹配器对象的方法对字符串进行操作.
    
        // 示例: 获取下列字符串中字符长度为 3 的字符串
            String str = "da jia hao,ming tian bu fang jia!";
    
        // 定义规则
            String regex = "\b[a-z]{3}\b";  // 其中 \b 表示单词边界
    
        // 将正则规则封装成对象
            Pattern p = Pattern.compile(regex);
    
        // 通过正则对象的 matcher 方法与字符串相关联, 获取匹配器对象 Matcher
            Matcher m = p.matcher("str");
    
        // 使用 matcher 对象的方法对字符串进行操作
        // 既然获取三个字母所组成的单词
        // 即查找, 使用 find() 方法, 该方法只能查找一次, 返回结果为布尔值
            while(m.find()){
                System.out.println(m.group());  // 获取匹配到的结果
            }
    
    
    // 综合练习: ip 地址排序
        // "192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55"
    
        public static void test(){
    
            String ip_str = "192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55";
    
            // 为了让 ip 可以按照字符串顺序比较, 只要让 ip 的每一段位数相同,
            // 所以, 补零. 按照每一位所需做多 0 进行补充. 每一段都加两个 0
                ip_str = ip_str.replaceAll("(\d+)", "00$1");
    
            // 然后每一段保留数字 3 位
                ip_str = ip_str.replaceAll("0*(\d{3})","$1");
    
            // 将 ip 地址切出, 切出结果为 String 类型数组
                String[] ips = ip_str.split(" +");  // 以一次(或多次)空格切出
    
            // 将每个 ip 地址取出, 放入 TreeSet 集合中比较
    
                TreeSet<String> ts = new TreeSet<String>();
                for(String ip : ips){
                    ts.add(ip);
                }
    
                for(String ip : ts){
                    System.out.println(ip.replaceAll("0*(\d+)","$1"));
                }
        }
    
    • 捕获组


    **参考资料** - [JavaSE 基础视频(毕向东)](https://www.bilibili.com/video/av3133827/#page=8) - [JDK 1.6 中文文档](http://tool.oschina.net/apidocs/apidoc?api=jdk-zh) - [Java替换指定字符串前后的指定字符(类似于String的trim()方法](https://blog.csdn.net/ylchou/article/details/79548074) - [What is a good alternative of LTRIM and RTRIM in Java?](https://stackoverflow.com/questions/15567010/what-is-a-good-alternative-of-ltrim-and-rtrim-in-java)
  • 相关阅读:
    A query was run and no Result Maps were found for the Mapped Statement 'com.demo.dao.UserDao.check'. It's likely that neither a Result Type nor a Result Map was specified.
    layui监听input内容变动简单粗暴
    Java多线程中
    Java 对象内存分析
    MySQL重做日志
    并查集-Java实现
    java虚拟机类加载机制
    Java的23种设计模式概述
    redo log 有什么作用?
    什么是redo log ?
  • 原文地址:https://www.cnblogs.com/linkworld/p/7524375.html
Copyright © 2020-2023  润新知