- 正则表达式: 即通过一些特定的符号操作字符串数据
- 特点: 简化了书写,但是阅读性较差
- 位于 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 基础视频(毕向东)
- JDK 1.6 中文文档
- Java替换指定字符串前后的指定字符(类似于String的trim()方法
- What is a good alternative of LTRIM and RTRIM in Java?
来源:https://www.cnblogs.com/linkworld/p/7524375.html