java自學之路-day11
JAVA11
正則表達式
l 概念
- 是一個字符串
- 滿足一定的規則
- qq號碼檢查
[1-9] [0-9] [4,9]
- 檢查某些字符是否合規 例如 用戶名是否合規
- 一個[]代表一個或者多個字符
- 為了解決String處理一些問題的太復雜
l 匹配規則
- 字符x
a) 需要匹配的內容是a
- 字符 \\
a) 代表 \
b) 是轉義字符
- \t 制表符
- \n 換行符 新增一空行
- \r 回車符 光標到下一行的首部
- [abc] 代表一個字符範圍
- [^abc] 代表取反的一個範圍 不是abc就匹配
- [a-zA-Z] 任意一個字母
- [0-9] 任意一個數字
- [a-z A-Z _ 0-9 ] 字母 下劃線 和數字都匹配
- \d 代表數字 0-9
- \w 代表字母 下劃線 和數字都匹配
- ^ 代表是行的開頭
a) ^[abc][0-9]$ 需要匹配的內容從[abc]這個位置開始 相當於左雙引號
- $ 代表是行的結尾
a) ^[abc][0-9]$ 需要匹配的內容以[0-9]這個位置結束 相當於右雙引號
- \b 單詞邊界
需要某個字符兩邊需要是非單詞字符 數字 字母 下劃線
- X ? 代表 x出現一次或者一次也沒有
- X * 代表出現零次 或者多次
- X + 代表出現一次或者多次
- X{n}代表出現n次
- X{n,}代表出現至少n次
- X{n,m}代表出現至少n次但不超過m次
l 使用
- String類的matches
返回值是boolean
“abc”.matches(“[a]”)
- String類的方法split
返回值是 String[]
使用規則將字符串進行切割
“abc”.split(“a”);
- String類的方法replaceAll
返回值是String
按照規則特換字符串
“abc0123”.reaplceAll(“[\\d]”,”#”)
把所有數字替換為#
- “ . ”表示任意字符
- “\\d+” 整數
- “\\d+\\.\\d+” 正小數
- “-\\d+” 負整數
- “-\\d+\\.\\d+” 負小數
- “\\d+\\.\d{2}” 保留兩位小數的正數
- “\\d+\\.\d{1,3}” 保留1-3位小數的正數
Date類
l 概述
- 表示特定的瞬間 精確到毫秒
- 以實現的接口
- 已有的子類
- 包名是Java.util.Date
- 毫秒 1000毫秒=1秒
- long time=System.currentTimeMillis();
- 返回Long型 因為超過了int的範圍
- 時間原點 零點 公元1970年1月1日 午夜0:00:00:
- 時間和日期的計算 必須依賴毫秒值
l 構造方法
- 已過時 從jdk1.1 被日歷類取代
- 除了 date(); date(long date)
- date()輸出不是對象地址 說明重寫了toString方法
Sat Jul 15 10:58:26 CST 2017 當前操作系統中的時間
- date(long date)
傳遞一個毫秒值
變成和零點相加的日期
- Date get set方法
getTime() 將日期轉為毫秒值 long time=System.currentTimeMillis()也可以
setTime() 將毫秒值轉為日期 構造方法也可以
l 日期格式化
- DateFormat
- 日期格式化的抽象類
- java.text包
- 抽象方法和非抽象方法都有
- SimpleDateFormat子類可以實現抽象方法 可以直接使用非抽象方法
- 創建SimpleDateFormat對象
構造方法中寫去日期格式
yyyy 年份
MM 月份
dd 月中的天數
HH 0-23小時
mm 小時中的分鐘
ss 秒
new SimpleDateFormat("公元yyyy年MM月dd日m分鐘ss秒");
漢字可以所以寫但字母必須按要求寫
然後調用format()方法 返回值是String 參數是一個date
l String轉為date對象
- Parse方法
- 步驟
a) 創建SimpleDateFormat對象
b) 構造方法指定日期格式
c) 子類對象 調用方法parse 傳遞String 返回Date
d) Parse中的字符串日期必須和指定的格式相同
e) 日期不能輸入 只能選擇
Calendar
l 概念
- 替換了date方法
- 為抽象類 不能創建對象 需要子類實現
- 靜態方法 靜態變量 YEAR 日歷字段
- getInstance ()獲得子類對象
l get 獲取日歷字段的值
get(int)
參數int獲取哪個日歷字段的具體數值
返回 int值
int year=calendar.get(calendar.YEAR);
年 YEAR
月份 MONTH
天數 DATE_OF_MOUTH
l set(int field,int value)
設置日歷哪個日歷字段 具體數值
set(int year,int month,int day)
傳遞3個整數的年月日
外國月份比國內少一月
l add(int 字段,int 偏移量)
日歷的偏移量可以指定哪個一個日歷中的字段,進行整數的偏移
l getTime() 不常用
將日歷對象轉為日期對象
練習
l 活了多少年
l 閏年
- 將日歷指定到3月1日,add偏移一天 29 閏年 28平年
l Java日歷
包裝類
概述
- 基本類型有八種 數學計算
- 基本類型進行復雜操作功能不夠 需要擴充
- 包裝類解決了這個問題
- 用戶從界面輸入的任何數據都是以字符串進行儲存
- 對這些字符串進行操作只能進行字符串操作 無法轉換為基本類型完成運算
- Java提供了八種基本類型的包裝類
每一個類中都封裝了一個基本類型 從而來操作更多數據
除了int 是iteger char是character 其他都是首字母大寫
- 主要學習integer,其他類和integer類差不多
- 在Java.lang包中
特點
l parseInt(String a)
- 在基本數據類型和字符串之間進行切換
- parseInt(String a)
- 將字符串解析為有符號的int整數
- 只能寫數字不能加空格
l parseInt(String s,int radix)
- 把其他進制數轉換為十進制
- 前面的進制數和後面的進制必須相對應
- 可以寫ABCDEF 16進制
l 將基本類型變為字符串
- 數據類型變量+“”
- Integer 靜態方法 toString
- toString(String s,int radix) 以規定進制輸出 最高支持36進制 0-9 A-Z
l 構造方法
- Integer(String s) 創建一個Interger對象 包含的是字符串
- 非靜態方法intValue() 返回int類型 將此字符串轉為基本數據類型
l 其他方法
- 三個方法 和 兩個靜態的成員變量
- MAX_VALUE 基本數據類型取值最大值
- MIN_ALUE 基本數據類型取值最小值
- toBinarString(int) 十進制轉為二進制 返回String
- toOctalString(int) 十進制轉為八進制
- toHexString(int) 十進制轉為十六進制
自動裝箱和自動拆箱
l jdk1.5後
數據類型變為對象 自動裝箱
對象中的數據變回基本數據類型 自動拆箱
l 自動裝箱
- Integer in=1;
打印後為字符串 1
例如集合ArrayList<Integer> 可以存儲1
- In=in+1
In首先in.inValue()轉為基本類型
然後in+1
之後in在轉為包裝類
l 弊端
空指針異常
如果是in是null的話,編譯沒錯但是運行會出錯
l 練習
System類
l Java.lang 包
l Final類
l 構造方法私有 外界不能直接建立對象
l 可以用類名訪問靜態方法
l 方法
- currentTimeMills()
a) 獲得當前系統時間
b) 可以在程序運行前後各調用一次用來進行統計程序執行時間
- exit()
a) 虛擬機退出就會停止運行程序
b) 退出虛擬機
c) 用參數作為狀態碼 0表示正常終止 1表示異常終止
- gc()
a) 回收垃圾
b) 比如匿名對象等
c) 在對象類 重寫 finalize()方法可以輸出語句
- getProperties()
getProperties(String key)
a) 獲取當前操作系統的屬性
b) 返回Properties 集合中的一個類 和ArrayList差不多
c) 輸出getProperties()就可以得到所有信息
d) file.separator 系統的文件位置符號 例如 windows \ unix
是/
- arrayCopy
a) 可變數組ArratList StringBuffer的原理都是用了這個
b) 源碼 沒有
c) 復制替換
d) 是調用windows的本地方法 JVM內存中有一部分是本地方法棧 這方法運行時就是在本地方方法棧中
Math類
概念
l 數學計算的類
l 工具類
l 平方根 對數 指數 三角函數
l Java.lang包中
l 靜態方法
方法
l static int abs(int i )
- 獲取參數的絕對值
- Math.abs(int a)
- 浮點 long都可以
l static double ceil(double d)
- 返回大於或者等於d的最小整數
- Math.cell()
l static double floor(double d)
- 返回小於或者等於d的最大整數
- Math.floor()
l static double pow(double a, double a,)
- 返回a的b次方
- Math.pow(2,3) 2的3次方
l static double sqrt(double d)
- 返回double參數的平方根
- 如果是負數-2 會輸出Nan
- 本地方法
l static double random(double d)
- 來源Random類
- 返回一個0.0-1.0之間的一個隨機數
- 不推薦用
l static double round(double d)
- 獲取參數的四舍五入 取整數
- 怎麽自己實現 +0.5 強轉int 在轉為double
Arrays工具類
概念
l 包含操作數組的內容
l Java.Util
l 包括排序 查找
方法
l static void sort(數組)
- 對數組進行升序排列
- 排序算法是經過優化的的快速排序
l static int binarySearch(數組,被查找的元素)
- 數組的二分搜索法
- 返回元素在數組中的出現的索引
- 如果元素不存在返回得是 (- 插入點-1)
a) 保證有序放到元素的中
b) -索引 -1
l static String toString(數組)
- 將數組變為字符串
- 並且 有一定格式
- 原理 StringBuilder 之前寫過的按照一定格式輸出數組
練習
l 接收輸入存儲十個人的成績
l 將最後三個人存入新的數組
l 返回新的數組
l 程序分析
- main方法傳過來一個數組
- 用sort方法進行排序
- 新建一個數組
- 用arraycopy將傳過來的數組的前三個元素復制到新數組
- 返回這數組
- Main接收這個數組
- 用toString輸出
- 也可以用for循環遍歷輸出和取出前三個元素 但是比較麻煩
BigInteger
概念引入
l Long型是最大的整數
l 超過long型的基本類型不能表示
l 變為BigInteger的對象
l 實現大數據的運算
l Java.math
構造方法
l 可以傳遞 字節數組 整型 有局限性
l 選擇傳遞String 可以表示任意大小的整數
l BigInteger(String s) 是一個對象
運算
l 可以進行四則運算
- 調用方運算
- 計算結果只能還是BigInteger對象
l 加法 add(另一個BigInteger對象)
- 結果還是一個對象
l 減法 subtract(另一個BigInteger對象)
結果還是一個對象
l 乘法 multiply(另一個BigInteger對象)
結果還是一個對象
l 除法 divied(另一個BigInteger對象)
結果還是一個對象
BigDeciaml
概述
- 0.09+0.01=0.09999999999999
l 無限接近0.1
- 原因 計算機計算二進制中表示浮點數不精確
- 超級大數浮點運算 提高運算精度
- Java.math
構造方法
l 建議用String進行傳遞參數
l Int和double 可能回超出 不可預知性
運算
l 加減乘
- 加法
a) add
b) 精確計算
- 減法
a) Subtract
b) 精確計算
- 乘法
c) Multiply
d) 精確計算
- 結果
0.1 0.68 101.5
l 除法 提現高精度
- 除法 divied
- 結果
1.301/100
0.01301
1.301/101
報異常 無限不循環
- 解決辦法:重載
a) 保留模式
閱讀API文檔
.ROUND_UP 向上一位加1
.ROUND_DOWN 截斷
.ROUND_HALF_UP 四舍五入
.ROUND_HALF_DOWN 四舍(大於0.5五)入
java自學之路-day11