第3章 包裝類&正則表達式
在實際程序使用中,程序界面上用戶輸入的數據都是以字符串類型進行存儲的。而程序開發中,我們需要把字符串數據,根據需求轉換成指定的基本數據類型,如年齡需要轉換成int類型,考試成績需要轉換成double類型等。那麽,想實現字符串與基本數據之間轉換怎麽辦呢?
Java中提供了相應的對象來解決該問題,基本數據類型對象包裝類:java將基本數據類型值封裝成了對象。封裝成對象有什麽好處?可以提供更多的操作基本數值的功能。
8種基本類型對應的包裝類如下:
其中需要註意int對應的是Integer,char對應的Character,其他6個都是基本類型首字母大寫即可。
1.2 包裝類的常用方法
A:構造方法:
B:成員方法:
1.2.1 案例代碼十:
package com.itheima_06;
/*
- 需求:判斷一個數是否符合int類型的範圍
- 由於基本數據類型只能做一些簡單的操作和運算,所以Java為我們封裝了基本數據類型,為每種基本數據類型提供了包裝類
- 包裝類就是封裝了基本數據類型的類,為我們提供了更多復雜的方法和一些變量
- byte Byte
- short Short
- char Character
- int Integer
- long Long
- float Float
- double Double
- boolean Boolean
- Integer:
- String --- int
- 方式1:int intValue()
- 方式2: static int parseInt(String s)
- int --- String
- 方式1: + ""
- 方式2:String toString()
- 構造方法:
- Integer(int value)
-
Integer(String s)
/
public class IntegerDemo {
public static void main(String[] args) {
/int n = 10;
if(n >= Math.pow(-2, 31) && n <= Math.pow(2, 31) -1) {
}
else {
System.out.println("不符合");
}*/
Integer i = new Integer("10");
System.out.println(i);
int a = i.intValue();
System.out.println(a + 10 );
int b = Integer.parseInt("20");
System.out.println(b + 30);
Integer i2 = new Integer(40);
String s = i2.toString();
System.out.println(s);
String s2 = Integer.toString(50);
System.out.println(s2);
}
}
1.3 包裝類的自動裝箱與拆箱
在需要的情況下,基本類型與包裝類型可以通用。有些時候我們必須使用引用數據類型時,可以傳入基本數據類型。
比如:
基本類型可以使用運算符直接進行計算,但是引用類型不可以。而基本類型包裝類作為引用類型的一種卻可以計算,原因在於,Java”偷偷地”自動地進行了對象向基本數據類型的轉換。
相對應的,引用數據類型變量的值必須是new出來的內存空間地址值,而我們可以將一個基本類型的值賦值給一個基本類型包裝類的引用。原因同樣在於Java又”偷偷地”自動地進行了基本數據類型向對象的轉換。
自動拆箱:對象轉成基本數值
自動裝箱:基本數值轉成對象
1.3.1 案例代碼十一:
package com.itheima_06;
import java.util.ArrayList;
/*
* JDK1.5特性:自動裝箱和拆箱
*
*/
public class IntegerDemo2 {
public static void main(String[] args) {
//Integer i = new Integer(10);
//自動裝箱
//相當於: Integer i = new Integer(10);
//Integer i = 10;
//自動拆箱
//相當於 int a = i.intValue();
//Integer i = 10;
//int a = i;
Integer i = 10;
Integer i2 = 20;
Integer i3 = i + i2;
/*
* Integer i3 = new Integer(i.intValue() + i2.intValue());
*
*/
ArrayList list = new ArrayList();
list.add(1);//自動裝箱,list.add(new Integer(1));
}
}
1.4 正則表達式
1.4.1 正則表達式概述
正則表達式是專門解決字符串規則匹配的工具。
正則表達式也是一個字符串,用來定義匹配規則。
參照幫助文檔,在Pattern類中有簡單的規則定義,可以結合字符串類的方法使用。
1.4.2 正則表達式匹配規則
參照幫助文檔,在Pattern類中有正則表達式的的規則定義,正則表達式中明確區分大小寫字母。我們來學習語法規則。
正則表達式的語法規則:
字符:x
含義:代表的是字符x
例如:匹配規則為 "a",那麽需要匹配的字符串內容就是 ”a”
字符:\含義:代表的是反斜線字符‘\‘
例如:匹配規則為"\\" ,那麽需要匹配的字符串內容就是 ”\”
字符類:[abc]
含義:代表的是字符a、b 或 c
例如:匹配規則為"[abc]" ,那麽需要匹配的內容就是字符a,或者字符b,或字符c的一個
字符類:[^abc]
含義:代表的是除了 a、b 或 c以外的任何字符
例如:匹配規則為"[^abc]",那麽需要匹配的內容就是不是字符a,或者不是字符b,或不是字符c的任意一個字符
字符類:[a-zA-Z]
含義:代表的是a 到 z 或 A 到 Z,兩頭的字母包括在內
例如:匹配規則為"[a-zA-Z]",那麽需要匹配的是一個大寫或者小寫字母
字符類:[0-9]
含義:代表的是 0到9數字,兩頭的數字包括在內
例如:匹配規則為"[0-9]",那麽需要匹配的是一個數字
字符類:[a-zA-Z_0-9]
含義:代表的字母或者數字或者下劃線(即單詞字符)
例如:匹配規則為" [a-zA-Z_0-9] ",那麽需要匹配的是一個字母或者是一個數字或一個下滑線
預定義字符類:.
含義:代表的是任何字符
例如:匹配規則為" . ",那麽需要匹配的是一個任意字符。如果,就想使用 . 的話,使用匹配規則"\\."來實現
預定義字符類:\d [0-9]
含義:代表的是 0到9數字,兩頭的數字包括在內,相當於[0-9]
例如:匹配規則為"\d ",那麽需要匹配的是一個數字
預定義字符類:\w [a-zA-Z_0-9]
含義:代表的字母或者數字或者下劃線(即單詞字符),相當於[a-zA-Z_0-9]
例如:匹配規則為"\w ",,那麽需要匹配的是一個字母或者是一個數字或一個下滑線
數量詞:X?
含義:代表的是X出現一次或一次也沒有
例如:匹配規則為"a?",那麽需要匹配的內容是一個字符a,或者一個a都沒有
數量詞:X*
含義:代表的是X出現零次或多次
例如:匹配規則為"a*" ,那麽需要匹配的內容是多個字符a,或者一個a都沒有
數量詞:X+
含義:代表的是X出現一次或多次
例如:匹配規則為"a+",那麽需要匹配的內容是多個字符a,或者一個a
數量詞:X{n}
含義:代表的是X出現恰好 n 次
例如:匹配規則為"a{5}",那麽需要匹配的內容是5個字符a
數量詞:X{n,}
含義:代表的是X出現至少 n 次
例如:匹配規則為"a{5, }",那麽需要匹配的內容是最少有5個字符a
數量詞:X{n,m}
含義:代表的是X出現至少 n 次,但是不超過 m 次
例如:匹配規則為"a{5,8}"
```,那麽需要匹配的內容是有5個字符a 到 8個字符a之間
1.4.3 案例代碼十二:
package com.itheima_07;[/align]/*
- 校驗qq號碼
- 要求必須是5-15位
- 0不能開頭
- 必須都是數字
正則表達式:就是一套規則,可以用於匹配字符串
boolean matches(String regex) :判斷當前字符串是否匹配指定的正則表達式,如果匹配則返回true,否則返回false -
/
public class RegexDemo {
public static void main(String[] args) {
String qq = "12a345";
/boolean flag = checkQQ(qq);
System.out.println(flag);*/
boolean flag = qq.matches("[1-9][0-9]{4,14}");
System.out.println(flag);
}
public static boolean checkQQ(String qq) {
int length = qq.length();
//要求必須是5-15位
if(length < 5 || length > 15) {
return false;
}
//0不能開頭
if(qq.startsWith("0")) {
return false;
}
//必須都是數字
for (int i = 0; i < length; i++) {
//得到參數的每一個字符
char c = qq.charAt(i);
if(c < ‘0‘ || c > ‘9‘) {
return false;
}
}
return true;//符合要求
}
}
1.4.4 案例代碼十三:
package com.itheima_07;
/*
* 判斷字符串”qaq”中間的字符是否是元音
*
* aeiou
* AEIOU
*
*/
public class RegexDemo2 {
public static void main(String[] args) {
boolean flag = check2("qbq");
System.out.println(flag);
}
public static boolean check(String s) {
s = s.toLowerCase();
char ch = s.charAt(1);
/*if(ch == ‘a‘ || ch == ‘e‘ || ch == ‘i‘ || ch == ‘o‘ || ch == ‘u‘) {
return true;
}
return false;*/
String str = "aeiou";
return str.contains(ch + "");
}
public static boolean check2(String s) {
return s.matches("\\w[aeiouAEIOU]\\w");
}
}
1.4.5 案例代碼十四:
package com.itheima_07;
/*
* 切割字符串"aa,bb,cc";
切割字符串"-1 99 4 23";
切割字符串"-1 99 4 23";
String[] split(String regex) 根據給定正則表達式的匹配拆分此字符串。
*
*/
public class RegexDemo3 {
public static void main(String[] args) {
//method();
//method2();
String s = "-1 99 4 23";
String[] arr = s.split(" +");
print(arr);
}
private static void method2() {
String s = "-1 99 4 23";
String[] arr = s.split(" ");
print(arr);
}
private static void method() {
String s = "aa,bb,cc";
String[] arr = s.split(",");
print(arr);
}
public static void print(String[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
第3章 包裝類&正則表達式