1. 程式人生 > >《Java程式設計》第8章學習總結

《Java程式設計》第8章學習總結

201711671201《Java程式設計》第8章學習總結

教材學習內容總結

第8章:常用實用類

主要的常用類有 String類, StringTokenizer類, Scanner類, StringBuffer類, Date類與 Calendar類, Math類, BigInteger類, Random類,Class類與Console類,Pattern類與Match類。

重點:字串的常用方法;字串分析器使用;類Date和類Calendar以及類Math的使用。

難點:字串分析器的使用;各常用類的實際運用。

一、String類

-Java專門提供了用來處理字元序列的String類。

-String類在java.lang包中,由於java.lang包中的類被預設引入,因此程式可以直接使用String類。

-需要注意的是Java把String類宣告為final類,因此使用者不能擴充套件String類,即String類不可以有子類。

1   構造String物件:(習慣的被翻譯為字串物件)

1.1  常量物件:字串常量物件是用雙引號括起的字元序列,例如:"你好"、"12.97"、"boy"等。

String常量是物件,有自己的引用和實體,如下圖:

簡單理解常量池:常量池中的資料在程式執行期間再也不允許改變。

1.2   String物件:使用String類宣告物件並建立物件,例如:

String  s = new String("we are students");
String  t = new String("we are students");

上述兩個物件s、t雖然有著一樣的實體,但是他們的引用是不同的,即表示式s==t的值是false;

在編寫程式時,使用者無法輸出String物件的引用:System.out.println(s);    輸出的是物件的實體;

可以用一個已建立的String物件建立另一個String物件,如:String tom = new String(s);

-String類還有兩個較常用的構造方法:

(1)String (char a[])用一個字元陣列a建立一個String物件,如:

char a[] = {'J','a','v','a'};
String s = new String(a);

(2)String(char a[],int startIndex,int count) 提取字元陣列a中的一部分字元建立一個String物件,引數startIndex和count分別指定在a中提取字元的起始位置和從該位置開始擷取的字元個數,如:

char a[] = {'零','壹','貳','叄','肆','伍','陸','柒','捌','玖'};
String s = new String(a,2,4);

 相當於  String s = new String("貳叄肆伍")。

1.3     引用Sting 常量

String常量是物件,可以把String常量的引用賦值給一個String物件,這時,兩個物件具有相同的引用,表示式s1==s2的值為true;由於使用者程式無法知道常量池中“你好”的引用,s1是使用者宣告的String物件,s1中的值是可以被改變的,如果再進行s1 = “boy”,那麼s1中的值將發生變化。

2     字串並置

String物件可以用“+”進行並置運算,即首尾相接得到一個新的String物件,例如:

String  you = "你";
String  hi = "好";
String  testOne;
testOne = you+shi;

如果是兩個常量進行並置運算,那麼得到的仍然是常量,如果常量池沒有這個常量就放入常量池。"你"+"好"的結果就是常量池中的"你好";參與並置運算的String物件,只要有一個是變數,那麼Java就會在動態區存放所得到的新String物件的實體和引用,you+hi相當於new String("你好")。

注意:程式更關心兩個String物件的實體,而不是二者的引用是否相同,判斷兩個String物件的實體,即字元序列是否相同需要用到equals(String s)方法。

3     String類的常用方法

--public int length()    用來獲取一個String物件的字元序列的長度

--public boolean equals(String s)      String物件呼叫該方法比較當前String物件的字元序列是否與引數s指定的String物件的字元序列相同(比較時忽略大小寫)

--public boolean startsWith(String s)、public boolean endsWith(String s)    String物件呼叫startsWith(String s)方法判斷當前String物件的字元序列字首是否引數指定的String物件s的字元序列、String物件呼叫endsWith(String s)方法判斷當前String物件的字元序列字尾是否引數指定的String物件s的字元序列

--public int compareTo(String s)    String物件呼叫該方法,按字典序與引數指定的String物件s的字元序列比較大小,如果字元序列相同返回0,如果大於s的字元序列,返回正值,反之返回負值

--public boolean contains(String  s)    呼叫該方法判斷當前字元序列是否包含出引數s的字元序列

--public int indexOf(String s)和public int lastIndexOf(String s)    String物件呼叫方法從當前String物件的字元序列的0索引位置開始檢索首次出現s的字元序列的位置,並返回該位置。如果沒有檢索到,該方法返回的值是–1、String物件呼叫方法從當前String物件的字元序列的0索引位置開始檢索最後一次出現s的字元序列的位置,並返回該位置。如果沒有檢索到,該方法返回的值是–1

--public String  substring(int startpoint)   字串物件呼叫該方法獲得一個新的String物件,新的String物件的字元序列是複製當前String物件的字元序列中的startpoint 位置至最後位置上的字元所得到的字元序列

--public String trim()   字串物件呼叫該方法得到一個新的字串物件,這個新的物件的字元序列是當前String物件的字元序列去掉空格後的字元序列

4       字串與基本資料的相互轉化

Java.lang包中的Integer類呼叫其類方法:   public static int parseInt(String s)可以將由“數字”字元組成的字串,如“876”,轉化為int型資料;類似地,使用java.lang包中的Byte、Short、Long、Float、Double類調相應的類方法可以將由"數字"字元組成的字串,轉化為相應的基本資料型別。

 

可以使用String 類的類方法

       public static String valueOf(byte n)

       public static String valueOf(int n)

       public static String valueOf(long n) 

       public static String valueOf(float n)等

將形如123、1232.98等數值轉化為字串,如:

         String str = String.valueOf(12313.9876);  

5     物件的字串表示

Object類有一個

                 public String toString()

方法,一個物件通過呼叫該方法可以獲得該物件的字元序列表示。一個物件呼叫toString()方法返回的String物件的字元序列的一般形式為:  建立物件的類的名字@物件的引用的字串表示

6     字串與字元陣列、位元組陣列

6.1  字串與字元陣列

String 類的構造方法:

–String(char[]);

–String(char[],int offset,int length)  分別用字元陣列中的全部字元和部分字元建立字串物件

將String物件的部分字元序列存放到陣列中的方法:  public void getChars(int start,int end,char c[],int offset )

將String物件的字元序列存放到陣列中的方法:  public char[] toCharArray()

6.2  字串與位元組陣列

  String(byte[])用指定的位元組陣列構造一個字串物件。

  String(byte[],int offset,int length) 用指定的位元組陣列的一部分,即從陣列起始位置offset開始取length個位元組構造一個字串物件。

–public byte[] getBytes()使用平臺預設的字元編碼,將當前String物件的字元序列存放到位元組陣列,並返回陣列的引用。

public byte[] getBytes(String charsetName)使用引數指定字元編碼,將當前String物件的字元序列存放到位元組陣列,並返回陣列的引用。

6.3   字串的加密演算法

使用一個String物件password 的字元序列作為密碼對另一個String物件sourceString的字元序列進行加密,操作過程如下:

將password 的字元序列存放到一個字元陣列:

char [] p = password.toCharArray();

7     正則表示式及字串的替換與分解

7.1  正則表示式

     正則表示式是一個String物件的字元序列,該字元序列中含有具有特殊意義字元,這些特殊字元稱做正則表示式中的元字元。

7.2   字串的替換

String物件呼叫public String replaceAll(String regex,String replacement)方法返回一個新的String物件,這個新的String物件的字元序列是把當前String物件的字元序列中所有和引數regex匹配的子字元序列,用引數replacement的字元序列替換後得到字元序列。

7.3  字元序列的分解

public String[] split(String regex)使用引數指定的正則表示式regex做為分隔標記分解出其中的單詞,並將分解出的單詞存放在字串陣列中。

 

二、StringTokenizer類

當分析一個String物件的字元序列並將字元序列分解成可被獨立使用的單詞時,可以使用java.lang包中的StringTokenizer類,該類有兩種常用的構造方法:

-StringTokenizer(String s)    為String物件s構造一個分析器,使用預設的分隔標記,即空格符、換行符、回車符、Tab符、進紙符做分隔標記

-StringTokenizer(String s,String delim)   為String物件s構造一個分析器。引數Delim的字元序列中的字元的任意排序被作為分隔標記

一個StringTokenizer物件被稱為一個字串分析器,常用方法:nextToken()  逐個獲取String物件的字元序列中的語言符號(單詞);hasMoreTokens()   只要字元序列中還有語言符號,該方法返回true; countTokens()  得到分析器中計量變數的值。

 

三、Scanner類

該類在之前的學習早已用上。

1    Scanner物件

Scanner物件可以呼叫方法

useDelimiter(正則表示式);

將正則表示式作為分隔標記,即讓Scanner物件在解析操作時,把與正則表示式匹配的字元序列作為分隔標記。如果不指定分隔標記,那麼Scanner物件預設地用空白字元:空格,製表符,回行符作為分隔標記來解析String物件的字元序列中的單詞。

Scanner物件呼叫nextInt()等方法時可能發生InputMismatchTxception 異常,在處理異常時,可以呼叫next()方法返回非數字化單詞。

2    StringTokenizer  和 Scanner 的區別

兩者都用於分解字元序列中的單詞,但二者在思想上有所不同,StringTokenizer物件能較快速度獲得單詞,但Scanner物件節省記憶體空間(用速度換取空間)。

 

四、StringBuffer類

1    StringBuffer物件

與String 類不同,StringBuffer 類的物件的實體的記憶體空間可以自動地改變大小,便於存放一個可變的字元序列,StringBuffer 類有三個構造方法:

-StringBuffer();    分配給該物件的實體的初始容量可以容納16個字元,當內容超出時可自動增加

-StringBuffer(int size);  指定分配給該物件實體的初始容量為size 個字元,可自動增加   

-StringBuffer(String s);  指定分配給該物件實體的初始容量為引數s的字元序列長度再加16.

2     StringBuffer 類的常用方法

1)append 方法

-StringBuffer append(String s):將String物件s的字元序列追加到當前StringBuffer物件的字元序列中,並返回當前StringBuffer物件的引用

-   StringBuffer append(int n):將int型資料n轉化為String物件,再把該String物件的字元序列追加到當前StringBuffer物件的字元序列中,並返回當前StringBuffer物件的引用

-StringBuffer append(Object o):將一個Object物件o的字元序列表示追加到當前String- Buffer物件的字元序列中,並返回當前StringBuffer物件的引用

類似的還有: StringBuffer append(long n);StringBuffer append(boolean n);   StringBuffer append(float n);StringBuffer append(double n);StringBuffer append(char n)。

2)

-public chat charAt(int n ):得到引數n指定的置上的單個字元

-public void setCharAt(int n ,char ch):將當前StringBuffer物件實體中的字串位置n處的字元用引數ch指定的字元替換

3)-StringBuffer insert(int index, String str) :將引數str指定的字串插入到引數index指定的位置

4)-public StringBuffer reverse() :將該物件實體中的字元翻轉

5)-StringBuffer delete(int startIndex, int endIndex):從當前StringBuffer物件實體中的字串中刪除一個子字串

6)-StringBuffer replace(int startIndex,int endIndex,String str):將當前StringBuffer物件實體中的字串的一個子字串用引數str指定的字串替換

 

五、Date 類與 Calendar類

Date類與Calendar類的例項可用於處理日期、時間相關的資料。

1   Date類

構造方法:無參 -Date nowTime = new Date() ;   獲取本機當前日期和時間

帶參-Date date1 = new Date(1000);  計算機系統將其自身的時間的“公元”設定在1970年1月1日0時,引數取正數表示公元后的時間,去負數表示公元前的時間;上述中1000表示1000毫秒,即獲取公元后過了1000毫秒的時間;

2   Calender 類

使用該類的static 方法getInstance()可以初始化一個日曆物件:Calendar calendar= Calendar.getInstance();

Calendar物件可以呼叫方法:

–public final void set(int year,int month,int date)

–public final void set(int year,int month,int date,int hour,int minute)

–public final void set(int year,int month, int date, int hour, int minute,int second)

–其作用是將日曆翻到任何一個時間;

Calendar物件可以呼叫方法:

–public long getTimeInMillis() 可以將時間表示為毫秒。

–public final void setTime(Date date)使用給定的 Date 設定此 Calendar 的時間

–public int get(int field) :可以獲取有關年份、月份、小時、星期等資訊。

 

六、日期格式化

1    format方法

Formatter類的format方法:

–format(格式化模式, 日期列表)

–按著“格式化模式”返回“日期列表”中所列各個日期中所含資料(年,月,日,小時等資料)的字串表示。

2    格式化模式

–format方法中的“格式化模式”是一個用雙引號括起的字元序列(字串),該字元序列中的字元由時間格式符和普通字元所構成。例如:"日期:%ty-%tm-%td"

3   日期列表

–format方法中的“日期列表”可以是用逗號分隔的Calendar物件或Date物件。

–format方法預設按從左到右的順序使用“格式化模式”中的格式符來格式“日期列表”中對應的日期,而“格式化模式”中的普通字元保留原樣。

4   格式化同一日期     

–可以在“格式化模式”中使用“<”,比如:"%ty-%<tm-%<td"中的三個格式符將格式化同一日期,即含有“<”的格式符和它前面的格式符格式同一個日期,例如:String s = String.format("%ty年%<tm月%<td日",new Date());那麼%<tm和%<td都格式化new Date(),因此字串s就是:"11年02月10日"。

5   不同區域的星期格式

如果想用特定地區的星期格式來表示日期中的星期,可以用format的過載方法:

         format (Locale locale,格式化模式,日期列表);

–其中的引數locale是一個Locale類的例項,用於表示地域。

–Locale類的static常量都是Locale物件,其中US是表示美國的static常量。

注:如果format方法不使用Locale引數格式化日期,當前應用程式所在系統的地區設定是中國,那麼相當於locale引數取Locale.CHINA。

 

七、Math類、BigInteger類、Random類

1    Math類

在編寫程式時,可能需要計算一個數的平方根、絕對值或獲取一個隨機數等,可通過類名Math直接呼叫類中的靜態方法進行科學計算,Math類有兩個static常量:E和PI,分別是2.718282828284590452354和4.14159265358979323846.

以下是Math類的常用類方法:

–public static long abs(double a)  返回a的絕對值。

–public static double max(double a,double b) 返回a、b的最大值。

–public static double min(double a,double b) 返回a、b的最小值。

–public static double random()  產生一個0到1之間的隨機數(不包括0和1)。

–public static double pow(double a,double b) 返回a的b次冪。

–public static double sqrt(double a) 返回a的平方根。

–public static double log(double a)  返回a的對數。

–public static double sin(double a) 返回正弦值。

2    BigInteger類

java.math包中的BigInteger類提供任意精度的整數運算。可以使用構造方法:

–public BigInteger(String val)  構造一個十進位制的BigInteger物件。

以下是BigInteger類的常用類方法:

–public BigInteger add(BigInteger val)  返回當前大整數物件與引數指定的大整數物件的和。

–public BigInteger subtract(BigInteger val)返回當前大整數物件與引數指定的大整數物件的差。

–public BigInteger multiply(BigInteger val)返回當前大整數物件與引數指定的大整數物件的積。

–public BigInteger divide(BigInteger val)返回當前大整數物件與引數指定的大整數物件的商。

–public BigInteger remainder(BigInteger val)返回當前大整數物件與引數指定的大整數物件的餘。

–public int compareTo(BigInteger val) 返回當前大整數物件與引數指定的大整數的比較結果,返回值是1、-1或0,分別表示當前大整數物件大於、小於或等於引數指定的大整數。

–public BigInteger pow(int a)  返回當前大整數物件的a次冪。

–public String toString()  返回當前大整數物件十進位制的字串表示。

public String toString(int p)  返回當前大整數物件p進位制的字串表示。

3     Random類

儘管可以使用Math類呼叫static方法random()返回一個0~1之間的隨機數(包括0.0單不包括1.0),但Java提供了更為靈活的用於獲取隨機數的Random類(java.util包中),構造方法如下:

–public Random();  使用當前機器時間作為種子建立一個Random物件

–public Random(long seed);  使用引數seek指定的種子建立一個Random物件

隨機數生成器random呼叫不帶引數的nextInt()方法:

         Random random=new Random();

         random.nextInt();

–返回一個0至n之間(包括0,但不包括n)的隨機數 隨機數生成器random呼叫帶引數的nextInt(int m)方法(引數m必須取正整數值)

注:對於具有相同種子的兩個Eandom物件,二者依次呼叫nextInt()方法獲取的隨機數序列是相同的。

 

八、數字格式化

所謂數字格式化,就是按照指定格式得到一個字元序列。

1       Formatter類提供了一個和C語言printf函式類似的format方法:

     format(格式化模式,值列表)

    該方法按著“格式化模式”返回“值列表”的字串表示。

1)格式化模式  format方法中的“格式化模式”是一個用雙引號括起的字元序列(字串),該字元序列中的字元由格式符和普通字元所構成。

     例如:"輸出結果%d,%f,%d"中的%d和%f是格式符號 .

2)值列表   format方法中的“值列表”是用逗號分隔的變數、常量或表示式。 例如:

String s=format("%d元%0.3f公斤%d臺",888,999.777666,123); 那麼,s就是"888元999.778公斤123臺"。

3)格式化順序

     format方法預設按從左到右的順序使用“格式化模式”中的格式符來格式化“值列表”中對應的值,而“格式化模式”中的普通字元保留原樣。

       例如,假設int型變數x和double型變數y的值分別是888和3.1415926,

      那麼對於String s = format("從左向右:%d,%.3f,%d",x,y,100);

      字串s就是:從左向右:888,3.142,100

注1:改變預設的順序(從左向右)進行格式化,在格式符前面新增索引符號index$,例如,1$表示“值列表”中的第1個,2$表示“值列表”中的第2個;

注2:如果準備在“格式化模式”中包含普通的%,在編寫程式碼時需要連續鍵入兩個%。

2     格式化整數

1)%d,%o,%x和%X 格式符可格式化byte、Byte、short、Short、int、Integer、long和Long型資料

2)修飾符    加號修飾符"+"格式化正整數時,強制新增上正號,例如,%+d將123格式化為"+123"

3)資料的寬度    資料的寬度就是format方法返回的字串的長度。規定資料寬度的一般格式為“%md”,其效果是在數字的左面增加空格;或"%-md“,其效果是在數字的右面增加空格。

3    格式化浮點數

1)%f,%e(%E),%g(%G)和%a(%A)格式符可格式化float、Float、double和Double:    %f 將值格式化為十進位制浮點數,小數保留6位。

2)修飾符

     加號修飾符"+"格式化正數時,強制新增上正號,例如%+f將123.78格式化為"+123.78", %+E將123.78格式化為"+1.2378E+2"。

     逗號修飾符“,”格式化浮點數時,將整數部分按“千”分組;

3)限制小數位數與資料的“寬度”

      "%.nf"可以限制小數的位數,其中的n是保留的小數位數,例如%.3f將6.1256格式化為"6.126"(保留3位小數)。

    規定寬度的一般格式為“%mf”(在數字的左面增加空格),或“%-md”(在數字的右面增加空格)。

 

九、Calss類與Console類

1     Class類

Class類是java.lang 包中的類,該類的例項可以幫助程式建立其他類的例項。可以使用Class物件得到某個類的例項,步驟如下:

1.1  使用Class的類方法得到一個和某類(引數 className 指定的類) 相關的Class物件:

public static Class forName(String className) throws ClassNotFoundException

1.2  步驟1.1中獲得的Class物件呼叫

Public Object newInstance() throws InstantiationException,IllegalAccessException

Class物件呼叫newInstance()例項化一個className類的物件時,className類必須有無引數的構造方法。

2     Console類

如果希望在鍵盤輸入一行文字,但不想讓該文字顯示,這時需要呼叫java.io包中的Console類的物件來完成。

首先,Console cons = System.console();

然後,char[] passwd = cons.readPassword();

 

十、Pattern類與Matcher類

1.建立Pattern物件

使用正則表示式regex做引數得到一個稱為模式的Pattern類的例項pattern:

     例如:String regex = "good";

                 Pattern pattern = Pattern.compile(regex);

模式物件是對正則表示式的封裝。Pattern類呼叫類方法compile(String regex)返回一個模式物件,其中的引數regex是一個正則表示式, 稱為模式物件使用的模式。

2.得到Matcher物件

模式物件pattern呼叫matcher(CharSequence input)方法返回一個Matcher物件matcher,稱為匹配物件。

Matcher matcher = pattern.matcher(input);

教材學習中的問題和解決過程

無。

程式碼除錯中的問題和解決過程

無。

感悟

多看多學唄。。。