编程算法基础-2.4正则表达式初步
2.4正则表达式初步现代计算机大多数处理非数值任务 所以应当熟悉串的API 串的: 搜索 匹配 分隔 替换 处理工具:正则表达式regular expression 其发展已经相当成熟,几乎可以当做一门独立的语言 有一套完整的规则和独立的语法系统 Java内置了对正则的支持 Java串的API中涉及的正则表达式 Split正则表达式应用——Split package RegularExpression; public class SplitTest { public static void main(String[] args) { String s = "abc zyx aaa bbb";//空格较多时,会产生空串 // String s = "abc+zyx+aaa+bbb"; // String ss[] = s.split(" {1,}");//" {1,}"正则写法,最少出现1次,最多出现任意多次(不谢就是任意多次) String ss[] = s.split(" +");//" +"和上面是同一个意思 //如果用+作分隔符,则必须转义, //----- "+" 表示 "+" //----- "{" 表示 "{" //----- "" 表示 "" for(int i=0;i<ss.length;i++){ System.out.println(ss[i]); } } } abc zyx aaa bbb //如果用+作分隔符,则必须转义, //----- "+" 表示 "+" //----- "{" 表示 "{" //----- ""表示 "" Match判断给定的字符串是否满足正则表达式 Excel地址规则 package RegularExpression; public class MatchTest { public static void main(String[] args) { String s = "AB88"; System.out.println(s.matches("[A-Z]{1,}[0-9]{1,}")); //"[A-Z]{1,}" 表示 A到Z出现了1次到无穷次,0到9出现了1次到无穷次 //注:原视频中讲的有错误,在Excel中,列是26进制的从A到Z,然后是AA...AZ,然后是AAA,AAB..... //可以出现三次字母的,不信你自己去看Excel! } } true 可以用于:判断手机号,身份证号,年龄等一些需要用户输入的要素 ,防止用户输入明显错误的信息 [A-Z]{1,5}方括号表示出现的内容,大括号表示出现的次数(量词) + 表示 {1,} 最少一次 * 表示 {0,} 任意多次 ? 表示 {0,1} 零次或一次 replaceAll格式替换 2005-12-05à 05/12 2005年 /* replaceAll 格式替换 2005-12-05 05/12 2005年 */ package RegularExpression; public class ReplaceAllTest { public static void main(String[] args) { // TODO Auto-generated method stub String s = "sdf jkjsd f2014-04-23我在写代码' ;d'dfs "; // s=s.replaceAll("[0-9]{4}-[0-9]{2}-[0-9]{2}","***"); s=s.replaceAll("([0-9]{4})-([0-9]{2})-([0-9]{2})","$3/$2 $1年"); //子组:在正则表达式中,用括号()括起来的部分称为子组 //$1,表示第一个子组 //$2,表示第二个子组 System.out.println(s); } } sdf jkjsd f23/04 2014年我在写代码' ;d'dfs // 子组 :在正则表达式中,用括号 () 括起来的部分称为子组 //$1,表示第一个子组 //$2,表示第二个子组 分散字符串请把下列字符串分散为数字和字符构成的串 String s1 ="abc1234xyz667kkmd764tttt"; 串由字母和数字间隔构成,要分离出所有的字母段和数字段,即: abc 1234 xyz 667 kkmd 764 tttt /* * 分散字符串 请把下列字符串分散为数字和字符构成的串 String s1 = "abc1234xyz667kkmd764tttt"; 串由字母和数字间隔构成,要分离出所有的字母段和数字段,即: abc 1234 xyz 667 kkmd 764 tttt */ package RegularExpression; import java.util.ArrayList; import java.util.List; public class SplitString { public static void main(String[] args) { String s = "1234xyz667kkmd764tttt123"; String []s1 = s.split("[a-z]+");//分别分割成两个字符串数组 String []s2 = s.split("[0-9]+"); List<String> list = new ArrayList<String>(); if(Character.isLetter(s.charAt(0))){//如果以字母开头 for(int i=0;i<s1.length-1;i++){ list.add(s1[i]);//加到list里 list.add(s2[i]); } if(Character.isLetter(s.charAt(s.length()-1))){//如果以字母结尾 showSplit(list); } if(Character.isDigit(s.charAt(s.length()-1))){//如果以数字结尾 list.add(s1[s1.length-1]); showSplit(list); } } if(Character.isDigit(s.charAt(0))){//如果以数字开头 for(int i=0;i<s2.length-1;i++){ list.add(s2[i]); list.add(s1[i]); } if(Character.isLetter(s.charAt(s.length()-1))){//如果以字母结尾 list.add(s2[s2.length-1]); showSplit(list); } if(Character.isDigit(s.charAt(s.length()-1))){//如果以数字结尾 list.add(s2[s2.length-1]); list.add(s1[s1.length-1]); showSplit(list); } } } public static void showSplit(List<String> list){ for(int i=1;i<list.size();i++){ System.out.println(list.get(i)); } } } 1234 xyz 667 kkmd 764 tttt 123 上述代码略显繁琐,若您有更好的想法欢迎留言。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Swift 3 UITableView数据源方法viewForHeaderInS
- XML :org.xml.sax.SAXParseException: Content
- SQLite 增删改查学习教程
- postgresql server start and then immediately
- 当脚本执行时AJAX调用返回时,JavaScript会发生什
- 打破从C#开始的流程
- ruby-on-rails – Rails 4参数;如何将参数列入一
- “AJAX”只需要一个CSRF令牌 – 只有“applicati
- postgresql 序列自增 & Mybatis添加功能
- flash钢琴自动弹奏之Python实现