regular expression ---正则表达式 --- REGEX 的一些补充

接着昨天的正则表达式,今天接着做一些补充:

先上两个练习:

 
练习:
1.邮箱格式的校验:
2607509766@qq.com   langang@163.com   langang@tedu.cn langang@sina.com.cn(只能出现一次com)
解析:在前面是一个数字字母的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){
        
        //怎么拆开?
        //碎片个数,将全部的叠字去掉
        
    }*/
    
}

好了,好了,好了,先简单回顾一下基础吧!之后在实际开发中,还需要进一步的介绍,下一篇随笔,就开始回顾包装类,数学类和抽象类吧!!

原文地址:https://www.cnblogs.com/tangdiao/p/9494454.html