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

201711671119《Java程式設計》第八章學習總計

教學內容總結

String類

一、

1.String類在Java的java.lang包中。Java專門提供了用來處理字元序列的String類。

2.程式可以直接使用String類。

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

 

二、String物件

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

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

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

使用者無法輸出String物件的引用:

System.out.println(s);

 

三、引用String常量

1.String常量是物件,因此可以把String常量的引用賦值給一個String物件,例如:

String s1,s2;  

s1 = "你好";

s2 = "你好"; //表示式s1==s2的值是true,因而具有相同的實體。

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

public class Example8_1 {
	  public static void main(String args[]) {
	       String hello = "你好";
	       String testOne = "你"+"好";             //【程式碼1】
	       System.out.println(hello == testOne);   //輸出結果是true
	       System.out.println("你好" == testOne);  //輸出結果是true
	       System.out.println("你好" == hello);    //輸出結果是true
	       String you = "你";
	       String hi = "好";
	       String testTwo = you+hi;                //【程式碼2】
	       System.out.println(hello == testTwo);   //輸出結果是false
	       String testThree = you+hi;                       
	       System.out.println(testTwo == testThree); //輸出結果是false
	    }
	}

程式更關心兩個String物件的實體,而不是二者的引用是否相同。判斷兩個String物件的實體,看字元序列是否相同。

 

四、String類的常用方法

1.public int length():獲取一個字串的長度

2.public boolean equals(String s):判斷當前String物件的字元序列是否與引數s指定的String物件的字元序列相同

3.public boolean startsWith(String s)

判斷當前String物件的字元序列字首是否是引數指定的String物件s的字元序列

4. public int compareTo(String s):按字典序與引數s指定的字元序列比較大小。

如果當前String物件的字元序列與s的相同,該方法返回值0,如果大於s的字元序列,該方法返回正值;如果小於s的字元序列,該方法返回負值。

     例如,字元a在Unicode表中的排序位置是97,字元b是98,那麼對於 String str = “abcde”; str.compareTo(“boy”)小於0,str.compareTo(“aba”)大於0,str.compareTo(“abcde”)等於0。

5.public boolean contains(String s):String物件呼叫contains方法判斷當前String物件的字元序列是否包含引數s的字元序列,例如,tom="student",那麼tom.contains("stu")的值就是true,而tom.contains("ok")的值是false。

6.public int indexOf (String str):String物件呼叫方法從當前String物件的字元序列的0索引位置開始檢索首次出現str的字元序列的位置,並返回該位置。如果沒有檢索到,該方法返回的值是–1,其相關方法:

   indexOf(String s ,int startpoint)

   lastIndexOf (String s)

    例如 String tom = "I am a good cat";

              tom.indexOf("a");//值是2

              tom.indexOf("good",2);//值是7

              tom.indexOf("a",7);//值是13

              tom.indexOf("w",2);//值是-1

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

8.public String trim() :得到一個新的String物件,這個新的String物件的字元序列是當前String物件的字元序列去掉前後空格後的字元序列。

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

1. 可以將由“數字”字元組成的字串

例如:      int x;

            String s = “876";

            x = Integer.parseInt(s);

Java.lang包中的Integer類呼叫其類方法:

public static int parseInt(String s)

public static byte parseByte(String s) throws NumberFormatException

public static short parseShort(String s) throws NumberFormatException

public static long parseLong(String s) throws NumberFormatException

public static float parseFloat(String s) throws NumberFormatException

public static double parseDouble(String s) throws NumberFormatException

 

2. 將(形如123、1232.98等)數值轉化為字串

   public static String valueOf(byte n)

   public static String valueOf(int n)

   public static String valueOf(long n) 

   public static String valueOf(float n)

   public static String valueOf(double n)

例子:String str = String.valueOf(12313.9876);  

 

六、物件的字串表示

一個物件通過呼叫Object類的public String toString()可以獲得該物件的字元序列表示。

形式:

建立物件的類的名字@物件的引用的字串表示

 

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

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()

 

2.字串與位元組陣列

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

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

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

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

 

3.字串的加密演算法(例子8)

char [] p = password.toCharArray();

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

1.正則表示式:是一個String物件的字元序列

元字元:正則表示式中的特殊字元。

詳見課本P187 表8.1

String物件呼叫public boolean matches(String regex)方法可以判斷當前String物件的字元序列是否和引數regex指定的正則表示式匹配。

 

2. 字串的替換

   public String replaceAll(String regex,String replacement)

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

 

3.字串的分解(例題11)

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

 

StringTokenizer類

1.StringTokenizer類在java.util包中,有兩個常用的構造方法:

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

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

 

2.使用方法/步驟:

(1) nextToken():逐個獲取字串中的語言符號(單詞),字串分析器中的負責計數的變數的值就自動減一  。

(2) hasMoreTokens():只要字串中還有語言符號,即計數變數的值大於0,該方法就返回true,否則返回false。

(3)countTokens():得到分析器中計數變數的值。

 

 

Scanner類

1.使用Scanner類從字串中解析程式所需要的資料。

Scanner物件可以解析字元序列中的單詞,為了解析出NBA的字元序列中的單詞,可以如下構造一個Scanner物件。

 Scanner物件可以呼叫方法

useDelimiter(正則表示式);

 

scanner將空格做為分隔標記來解析字元序列中的單詞,

 

2.使用正則表示式作為分隔標記解析字串

Scanner物件可以呼叫 useDelimiter(正則表示式); 方法將一個正則表示式作為分隔標記,即和正則表示式匹配的字串都是分隔標記。

 

 

StringBuffer類

1.String物件的字元序列是不可修改的,StringBuffer類的物件的實體的記憶體空間可以自動地改變大小,便於存放一個可變的字元序列。

2.常用方法:

1) 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物件實體中的字串中刪除一個子字串

   其相關方法:deleteCharAt(int index) 刪除當前StringBuffer物件實體的字串中index位置處的一個字元。

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

 

 

Date類與Calendar類

Date類在java.util包中

構造方法一:Date()

使用Date類的無引數構造方法建立的物件可以獲取本地當前時間。

     例: Date nowTime=new Date();

Date物件表示時間的預設順序是:星期、月、日、小時、分、秒、年。

構造方法二:Date(long time)

使用long型引數建立指定的時間

//System類的靜態方法 public long currentTimeMillis() 獲取系統當前時間

 

Calendar類在java.util 包中

使用Calendar類的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)

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

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

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

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

 

日期格式化

1.format方法

Formatter類的format方法:

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

Java已經將format方法做為了String類的靜態方法,因此,程式可以直接使用String類呼叫format方法對日期進行格式化。

1)格式化模式

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

String s = String.format("%tY年%tm月%td日",new Date(),new Date(),new Date());

2)日期列表

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

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

3)格式化同一日期     

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

 

2.不同區域的星期格式

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

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

 

Math類、BigInteger類與Random類

Math類在java.lang包中

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) 返回正弦值。

public static double asin(double a)  返回反正弦值。

 

BigInteger類在java.math包中,提供任意精度的整數運算

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進位制的字串表示

 

Random類在java.util包中

使用Math類呼叫其類方法random()返回一個0至1之間的隨機數(不包括0和1)。(int)(Math.random()*100)+1;

 

Random類的構造方法

public Random();

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

 

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

 Random random=new Random();

 random.nextInt();

 

數字格式化

Formatter 類

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

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

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

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

 

 

Class類與Console類

Class類

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

public static Class forName(String className) throws ClassNotFoundException

(上述方法返回一個和引數className指定的類相關的Class物件。如果類在某個包中,className必須帶有包名,例如, className="java.util.Date"

2.上述方法返回一個和引數className指定的類相關的Class物件。如果類在某個包中,className必須帶有包名,例如, className="java.util.Date"。此時,className類必須有無引數的構造方法。

Console類

如果希望在鍵盤輸入一行文字,但不想讓該文本回顯,即不在命令列顯示,那麼就需要使用java.io包中的Console類的物件來完成。

步驟:1.Console cons = System.console();

2. cons呼叫readPassword()方法【即char[] passwd = cons.readPassword();

】讀取使用者在鍵盤輸入的一行文字,並將文字以一個char陣列返回:

 

 

Pattern類與Math類

都在java.util.regex包中。用於檢索。

1.建立模式物件

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

2.得到匹配物件

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

              Matcher matcher = pattern.matcher(input);

Matcher物件matcher可以使用下列方法尋找字串input中是否有和模式regex匹配的子序列(regex是建立模式物件pattern時使用的正則表示式)。

public boolean find():尋找input和regex匹配的下一子序列,如果成功該方法返回true,否則返回false。

public boolean matches()matcher呼叫該方法判斷input是否完全和regex匹配。

public boolean lookingAt()matcher呼叫該方法判斷從input的開始位置是否有和regex匹配的子序列。

public boolean find(int start) : matcher呼叫該方法判斷input從引數start指定位置開始是否有和regex匹配的子序列 。

public String replaceAll(String replacement) matcher呼叫該方法可以返回一個字串,該字串是通過把input中與模式regex匹配的子字串全部替換為引數replacement指定的字串得到的.

public String replaceFirst(String replacement) matcher呼叫該方法可以返回一個字串,該字串是通過把input中第1個與模式regex匹配的子字串替換為引數replacement指定的字串得到的。