1. 程式人生 > >regular expression ---正則表達式 --- REGEX 的一些補充

regular expression ---正則表達式 --- REGEX 的一些補充

全部 can sta mat ner system spa ble ack

接著昨天的正則表達式,今天接著做一些補充:

先上兩個練習:

練習: 1.郵箱格式的校驗: [email protected] [email protected] [email protected] [email protected](只能出現一次com) 解析:在前面是一個數字字母的6到32個的情形,接著直接寫一個@,後面是數字字母的至少一個的情形,接著一個點(需要轉義),再前面是一個com(用一個捕獲組表示)點後面,直接另一個捕獲組(cn)即可,這裏可以用到一個 || 將兩種情形分開.
package cn.tedu.regex;
/**
 * 1.郵箱格式的校驗:
[email protected]   [email protected]   [email protected] [email protected](只能出現一次com)

 * 
@author 唐雕 * */ public class PatternExer3 { public static void main(String[] args) { String email = "[email protected]"; //用()裏面就可以增加一連串的東西了 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){
        
        //怎麽拆開?
        //碎片個數,將全部的疊字去掉
        
    }*/
    
}

好了,好了,好了,先簡單回顧一下基礎吧!之後在實際開發中,還需要進一步的介紹,下一篇隨筆,就開始回顧包裝類,數學類和抽象類吧!!

regular expression ---正則表達式 --- REGEX 的一些補充