1. 程式人生 > >第3章 包裝類&正則表達式

第3章 包裝類&正則表達式

Java

1.1 包裝類
在實際程序使用中,程序界面上用戶輸入的數據都是以字符串類型進行存儲的。而程序開發中,我們需要把字符串數據,根據需求轉換成指定的基本數據類型,如年齡需要轉換成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) {

    System.out.println("符合");
    }
    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章 包裝類&正則表達式