1. 程式人生 > 其它 >格式化字串 format()

格式化字串 format()

格式化字串 format()

//有的也可以表示    更簡便
Date date = new Date();
System.out.printf("%tc",date);

格式化日期

Date date = new Date();
String year=String.format("%tY",date);
String month=String.format("%tB",date);
String day=String.format("%td",date);
System.out.println("今年是"+year+"年");
System.out.println("現在是"+month);
System.out.println("今天是"+day+"號");//輸出執行時的日期

常用日期格式轉換符

轉換符 說明 示例
%te 一個月中的某一天(1~31) 2,12,22
%tb 指定語言環境的月份簡稱 Feb(英文),二月(中文)
%tB 指定語言環境的月份全稱 February(英文),二月(中文)
%tA 指定語言環境的星期全稱 Monday,星期一
%ta 指定語言環境的星期簡稱 Mon,星期一
%tc 包括全部日期和時間資訊 星期四 八月 12 16:09:51 CST 2021
%tY 四位年份 2021
%tj 一年中的第幾天(1~366) 065
%tm 月份 08
%td 一個月中的第幾天(1~31) 23
%ty 兩位年份 21

時間格式化

Date date = new Date();
String hour=String.format("%tH",date);
String minute=String.format("%tM",date);
String second=String.format("%tS",date);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);

常用時間格式轉換符

轉換符 說明 示例
%tH 2位數字的24時制的小時(00~23) 16
%tI(大寫i) 2位數字的12時制的小時(01~12) 04
%tk 2位數字的24時制的小時(0~23) 5
%tl(小寫L) 2位數字的12時制的小時(1~12) 10
%tM 2位數字的分鐘數(00~59) 56
%tS 2位數字的分鐘數(00~60) 23
%tL 3位數字的毫秒數(000~999) 990
%tN 9位數字的毫秒數(000000000~999999999) 564892548
%tp 指定語言環境下上午或下午的標記 下午,pm
%tz 相對於GMT RFC 82格式的數字時區偏移量 +0800
%tZ 時區縮寫形式的字串 CST
%ts 1970-01-01 00:00:00至現在經過的秒數
%t 1970-01-01 00:00:00至現在經過的毫秒數

常見的日期與時間組合格式

轉換符 說明 示例
%tF "年-月-日" 4位年份 2021-08-12
%tD "月/日/年" 2位年份 08/12/21
%tc 全部日期和時間資訊 星期四 八月 12 16:39:43 CST 2021
%tr "時:分:秒 PM(AM)" 12時制 04:41:43 下午
%tT "時:分:秒" 24時制 16:41:43
%tR "時:分" 24時制 16:41

常規型別格式化

String s1=String.format("%d",400/2);
String s2=String.format("%b",3>5);
String s3=String.format("%x",200);

System.out.println(s1);//200
System.out.println(s2);//false
System.out.println(s3);//c8

常規轉換符

轉換符 說明 示例
%b、%B 結果被格式化為布林型別 true,false
%h、%H 結果被格式化為雜湊碼 ?
%s、%S 結果被格式化為字串型別 "abcd"
%c、%C 結果被格式化為字元型別 'a'
%d 結果被格式化為十進位制整數 40
%o 結果被格式化為八進位制整數 11
%x、%X 結果被格式化為十六進位制整數 c8
%e 結果被格式化為用電腦科學記數法表示的十進位制數
%a 結果被格式化為帶有效位數和指數的十六進位制浮點值
%n 結果為特定於平臺的行分隔符
%% 結果為字面值“%” %

正則表示式

//定義正則表示式,也就是E-mail地址格式
String regex="\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
//定義需要驗證的
String s1="aaa@";
String s2="[email protected]";
String s3="[email protected]";
//判斷是否匹配
if (s1.matches(regex)){
    System.out.println(s1+"是一個合法的E-mail地址格式");
}
if (s2.matches(regex)){
    System.out.println(s2+"是一個合法的E-mail地址格式");
}
if (s3.matches(regex)){
    System.out.println(s3+"是一個合法的E-mail地址格式");
}

//輸出s1,s2都是合法的
/*合法E-mail地址格式為  [email protected]
"\\w"匹配任意字元
"+"表示字元可出現一次或多次
(\.\w{2,3})*表示像.com類的字串可以出現多次(包括0)
\.\w{2,3}表示最後的像.cn之類的結尾字串
 */

使用者設定密碼模擬

public static void main(String[] args) {
    while (true){                  //迴圈直至密碼輸入符合要求
    Scanner sc = new Scanner(System.in);
    System.out.println("請輸入密碼");
    String str=sc.next();

    //檢查密碼
    if (check(str)){
        System.out.println("此密碼符合要求");
        break;//非常重要,停止執行
    }else{
        System.out.println("請按要求重新設定密碼");
    }
    }
}

public static boolean check(String str){
    //判斷是否有其他符號,並判斷密碼長度是否正常
    if (!str.matches("[a-zA-Z0-9]{8,20}"))
        return false;

    //記錄出現了幾種字元
    int count=0;

    if (str.matches(".*[a-z].*"))
        count++;
    if (str.matches(".*[A-Z].*"))
        count++;
    if (str.matches(".*[0-9].*"))
        count++;
    if (count<2){
        System.out.println("密碼錯誤");
        return false;
    }else
        return true;
}

正則表示式中的元字元

元字元 正則表示式中的寫法 意義
. . 任意一個字元
\d \\d 0~9的任何一個數字
\D \\D 任何一個非數字字元
\s \\s 空白字元,如'\t','\n'
\S \\S 飛空白字元
\w \\w 可用於識別符號的字元,不包括$
\W \\W 不可用於識別符號的字元
\p{Lower} \\p{Lower} 小寫字母a~z
\p{Upper} \\p{Upper} 大寫字母A~Z
\p{ASCII} \\p{ASCII} ASCII字元
\p{Alpha} \\p{Alpha} 字母字元
\p{Digit} \\p{Digit} 十進位制數字,0~9
\p{Alnum} \\p{Alnum} 數字或字母字元
\p{Punct} \\p{Punct} 標點符號 !"#$%&'()*+-,/><=?@[]^_`{|}~
\p{Graph} \\p{Graph} 可見字元 [\p{Alnum}\p{Punct}]
\p{Print} \\p{Print} 可列印字元 [\p{Graph}\x20]
\p{Blank} \\p{Blank} 空格或製表符 [\t]
\p{Cntrl} \\p{Cntrl} 控制字元 [\x00-\x1F\x7F]

還有其他格式

[^456] 表示除4,5,6之外的任意字元

[a-r] 代表a-r中的任何字母

[a-zA-Z] 代表任何一個字母

限定修飾符

限定修飾符 意義 例項
0次或1次 A?
* 0次或多次 A*
+ 1次或多次 A+
{n} 正好出現n次 A{2}
{n,} 至少出現n次 A{3,}
{n,m} 出現n~m次 A{2,6}