接着昨天的正则表达式,今天接着做一些补充:
先上两个练习:
练习:
1.邮箱格式的校验:
解析:在前面是一个数字字母的6到32个的情形,接着直接写一个@,后面是数字字母的至少一个的情形,接着一个点(需要转义),再前面是一个com(用一个捕获组表示)点后面,直接另一个捕获组(cn)即可,这里可以用到一个 || 将两种情形分开.
package cn.tedu.regex; /** * 1.邮箱格式的校验: 2607509766@qq.com langang@163.com langang@tedu.cn langang@sina.com.cn(只能出现一次com) * @author 唐雕 * */ public class PatternExer3 { public static void main(String[] args) { String email = "iwouuu98489@qq.com"; //用()里面就可以增加一连串的东西了 System.out.println(email.matches("[a-zA-Z0-9]{6,32}@[a-zA-Z0-9]+(\.com)") || email.matches("[a-zA-Z0-9]{6,32}@[a-zA-Z0-9]+(\.com)?(\.cn)")); } }
2.输入一个字符串,统计其中每一个字符出现的次数
解析:用到字符串的replaceAll(),里面填写一个正则表达式,用空串代替。然后就是原长度-现在长度就是这个字符的次数,输出即可。
package cn.tedu.regex; import java.util.Scanner; /** * 5. 输入一个字符串,统计其中每一个字符出现的次数 * @author 唐雕 * */ public class PatternExer1 { public static void main(String[] args) { Scanner s = new Scanner(System.in); String str = s.next(); getCount(str); } //这个方法 public static void getCount(String str){ if(str == null) System.out.println("输入不合法!!"); while(str.length() > 0) { char c = str.charAt(0); int len = str.length(); str = str.replaceAll("" + c, "");//怎么将一个变量放到正则表达式中?直接用一个连接就是了,返回现在的字符串长度 System.out.print(c + ":" + (len - str.length()) + " "); } } }
3.对于任意的字符串可以认为是由多组叠字或者单字来拼成的,这每一组叠字/单字都是字符串的碎片,计算一个字符串平均的碎片长度
aaabbbbbcddaaacc -> aaa bbbbb c dd aaa cc -> (3 + 5 + 1 + 2 + 3 + 2)/6 = 2.67
解析:原长度就是那个,后面就是每一个的个数,同上,也是用到字符串的 replaceOf()方法,只是后面代替就是前面的那个,是一个叠字的情形!!
package cn.tedu.regex; /** * 3.对于任意的字符串可以认为是由多组叠字或者单字来拼成的,这每一组叠字/单字都是字符串的碎片,计算一个字符串平均的碎片长度 aaabbbbbcddaaacc -> aaa bbbbb c dd aaa cc -> (3 + 5 + 1 + 2 + 3 + 2)/6 = 2.67 * @author 唐雕 * */ public class PatternExer3 { public static void main(String[] args) { String str = "aaabbbbbcddaaacc"; //记录字符串的原长度 int len = str.length(); //将字符串中叠字替换为单字,然后求出长度,也就是个数 str = str.replaceAll("(.)\1+", "$1"); System.out.println(len*1.0/str.length());//绝大部分小数转化为二进制在计算机中进行存储的时候,都会产生舍入误差, //所以结果是一连串的小数!! } /* //这个方法 public static double getAverage(String str){ //怎么拆开? //碎片个数,将全部的叠字去掉 }*/ }
好了,好了,好了,先简单回顾一下基础吧!之后在实际开发中,还需要进一步的介绍,下一篇随笔,就开始回顾包装类,数学类和抽象类吧!!