一、學習內容
1.String類——8,1知識
- Java專門提供了用來處理字符序列的String類。String類在java.lang包中,由于java.lang包中的類被默認引入,因此程序可以直接使用String類。
- 需要注意的是Java把String類聲明為final類,因此用戶不能擴展String類,即String類不可以有子類。
- 構造String對象
- 常量對象:字符串常量對象是用雙引號括起的字符序列,例如:"你好"、"12.97"、"boy"等。Java把用戶程序中的String常量放入常量池。因為String常量是對象,所以也有自己的引用和實體。
- String對象:可以使用String類聲明對象并創建對象,例如:
String s = new String("we are students"); String t = new String("we are students");
- 對象變量s中存放著引用,表明自己的實體的位置,即new 運算符首先分配內存空間并在內存空間中放入字符序列,然后計算出引用。
- 另外,用戶無法輸出String對象的引用:
Syste.out.println(s);
。輸出的是對象的實體,即字符序列we are students
。 - 也可以用一個已創建的String對象創建另一個String對象,如:
String tom = new String(s);
- String類還有兩個較常用的構造方法。
- String (char a[])用一個字符數組a創建一個String對象,如:
char a[] = {'J','a','v','a'}; String s = new String(a);
過程相當于
String s = new String("Java");
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("貳叁肆伍");
正則表達式
- 正則表達式是一個String對象的字符序列,該字符序列中含有具有特殊意義字符,這些特殊字符稱做正則表達式中的元字符。比如,"\dcat"中的\d就是有特殊意義的元字符,代表0到9中的任何一個,"0cat","1cat","2cat",…,"9cat"都是和正則表達式"\dcat"匹配的字符序列。
- 在正則表達式中可以用方括號括起若干個字符來表示一個元字符,該元字符代表方括號中的任何一個字符。例如String regex = "[159]ABC",那么"1ABC"、"5ABC"和"9ABC"都是和正則表達式regex匹配的字符序列。例如,[abc]:代表a、b、c中的任何一個;[^abc]:代表除了a、b、c以外的任何字符;[a-zA-Z]:代表英文字母(包括大寫和小寫)中的任何一個。
- String對象調用public String replaceAll(String regex,String replacement)方法返回一個新的String對象,這個新的String對象的字符序列是把當前String對象的字符序列中所有和參數regex匹配的子字符序列,用參數replacement的字符序列替換后得到字符序列。
public String[] split(String regex)
使用參數指定的正則表達式regex做為分隔標記分解出其中的單詞,并將分解出的單詞存放在字符串數組中。例如,對于字符串strString str = "1949年10月1日是中華人民共和國成立的日子";
如果準備分解出全部由數字字符組成的單詞,就必須用非數字字符串做為分隔標記,因此,可以使用正則表達式:String regex="\\D+";
做為分隔標記分解出str中的單詞:String digitWord[]=str.split(regex);
那么,digitWord[0]、digitWord[1]和digitWord[2]就分別是“1949”、“10”和“1”。2.StringTokenizer類 ——8.2知識
- StringTokenizer類在java.util包中,有兩個常用的構造方法:
- StringTokenizer(String s):為String對象s構造一個分析器。使用默認的分隔標記,即空格符、換行符、回車符、Tab符、進紙符做分隔標記。
- StringTokenizer(String s, String delim為String對象s構造一個分析器。參數delim的字符序列中的字符的任意排列被作為分隔標記。
- StringTokenizer對象稱作一個字符串分析器可以使用下列方法:
- nextToken():逐個獲取字符串中的語言符號(單詞),字符串分析器中的負責計數的變量的值就自動減一 。
- hasMoreTokens():只要字符串中還有語言符號,即計數變量的值大于0,該方法就返回true,否則返回false。
- countTokens():得到分析器中計數變量的值
3.Scanner類——8.3知識
- scanner將空格做為分隔標記來解析字符序列中的單詞,具體解析操作:
scanner調用next()方法依次返回NBA中的單詞,如果NBA最后一個單詞已被next()方法返回,scanner調用hasNext()將返回false,否則返回true。
對于被解析的字符序列中的數字型的單詞,比如618,168.98等,scanner可以用nextInt()或nextDouble()方法來代替next()方法,即scanner可以調用nextInt()或nextDouble()方法將數字型單詞轉化為int或double數據返回。
如果單詞不是數字型單詞,scanner調用nextInt()或nextDouble()方法將發生InputMismatchException異常,在處理異常時可以調用next()方法返回該非數字化單詞。
- Scanner對象可以調用 useDelimiter(正則表達式); 方法將一個正則表達式作為分隔標記,即和正則表達式匹配的字符串都是分隔標記。
4.StringBuffer類——8.4知識
- 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)
- public chat charAt(int n ):得到參數n指定的置上的單個字符
- public void setCharAt(int n ,char ch):將當前StringBuffer對象實體中的字符串位置n處的字符用參數ch指定的字符替換
- StringBuffer insert(int index, String str) :將參數str指定的字符串插入到參數index指定的位置
- public StringBuffer reverse() :將該對象實體中的字符翻轉
- StringBuffer delete(int startIndex, int endIndex):從當前StringBuffer對象實體中的字符串中刪除一個子字符串
- 其相關方法:deleteCharAt(int index) 刪除當前StringBuffer對象實體的字符串中index位置處的一個字符。
- StringBuffer replace(int startIndex,int endIndex,String str):將當前StringBuffer對象實體中的字符串的一個子字符串用參數str指定的字符串替換
5.Date與Calendar類——8.5知識
(1) Date類
- Date類在java.util包中.
- Date類的構造方法之一:
- Date()使用Date類的無參數構造方法創建的對象可以獲取本地當前時間。
- Date類的構造方法之二:
- Date(long time)使用long型參數創建指定的時間
- System類的靜態方法 public long currentTimeMillis() 獲取系統當前時間。
(2)Calendar類
- 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)
//其作用是將日歷翻到任何一個時間
6.日期的格式化——8.6知識
可以直接使用String類調用format方法對日期進行格式化。
8.6.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());
那么s
就是"2011年02月10日"
- 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日"
。
8.6.2 不同區域的星期格式
如果想用特定地區的星期格式來表示日期中的星期,可以用format的重載方法:format (Locale locale,格式化模式,日期列表);
其中的參數locale
是一個Locale類的實例,用于表示地域。
Locale類的static常量都是Locale對象,其中US是表示美國的static常量。
7.Math類、BigInteger類和Random類——8.7知識
8.7.1 Math類
Math類在java.lang包中。Math類包含許多用來進行科學計算的類方法,這些方法可以直接通過類名調用。
另外,Math類還有兩個靜態常量,它們分別是:E 2.7182828284590452354
和PI 3.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)
返回正弦值。public static double asin(double a)
返回反正弦值。public static double ceil(double a)
返回大于a的最小整數,并將該整數轉化為double
型數據。public static double floor(double a)
返回小于a的最大整數,并將該整數轉化為double
型數據。public static long round(double a)
返回值是(long)Math.floor(a+5),即所謂a的“四舍五入”后的值。
8.7.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進制的字符串表示。
8.7.3 Random類
Random類的如下構造方法:
public Random();
public Random(long seed);
第一個構造方法使用當前及其實踐作為種子創建一個Random對象,第二個構造方法使用參數seed
指定的種子創建一個Random對象。
隨機數生成器random調用不帶參數的nextInt()
方法:
Random random=new Random();
random.nextInt();
返回一個0至n之間(包括0,但不包括n)的隨機數
隨機數生成器random調用帶參數的nextInt(int m)
方法(參數m必須取正整數值)
8.數字格式化——8.8知識
8.8.1 format方法
Formatter類提供了一個和C語言printf函數類似的format方法:format(格式化模式,值列表)
該方法按著“格式化模式”返回“值列表”的字符串表示。
Java已經將format方法做為了String類的靜態方法,因此,程序可以直接使用String類調用format方法對數字進行格式化。
- 1.格式化模式:format方法中的“格式化模式”是一個用雙引號括起的字符序列(字符串),該字符序列中的字符由格式符和普通字符所構成。
例如:"輸出結果%d,%f,%d"
中的%d
和%f
是格式符號。
format方法返回的字符串就是“格式化模式”中的格式符被替換為它得到的格式化結果后的字符串。
例如:String s = String.format(“%.2f”,3.141592);
那么s
就是“3.14”
. - 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個,
對于:String s=String.format(“不是從左向右:%2$.3f,%3$d,%1$d”,x,y,100);
字符串s
就是:不是從左向右:3.142,100,888 - 注2:如果準備在“格式化模式”中包含普通的
%
,在編寫代碼時需要連續鍵入兩個%
,如:String s=String.format("%d%%",89);
輸字符串s是:"89%"
- 注1:改變默認的順序(從左向右)進行格式化,在格式符前面添加索引符號
8.8.2 格式化整數
- 1.
%d
、%o
、%x
和%X
格式符可格式化byte、Byte、short、Short、int、Integer、long和Long型數據。 - 2.修飾符
- 加號修飾符"+"格式化正整數時,強制添加上正號,例如,%+d將123格式化為"+123"。
- 逗號修飾符“,”格式化整數時,按"千"分組。
- 3.數據的寬度
數據的寬度就是format方法返回的字符串的長度。規定數據寬度的一般格式為“%md”,其效果是在數字的左面增加空格;或"%-md“,其效果是在數字的右面增加空格,
例如,將數字59格式化為寬度為8的字符串:String s=String.format("%8d",59);
字符串s
就是:“ 59"
,其長度(s.length())
為8,即s
在59左面添加了6個空格字符。- 對于:
String s=String.format(“%-8d”,59);
字符串s
就是:"59 "
,其長度(s.length())
為8。 - 對于:
String s=String.format("%5d%5d%8d",59,60,90);
字符串s
就是:“59 60 90”
(長度為18)。
- 對于:
注:如果實際數字的寬度大于格式中指定的寬度,就按數字的實際寬度進行格式化。
可以在寬度的前面增加前綴0,表示用數字0(不用空格)來填充寬度左面的富裕部分,例如:String s=String.format("%08d",12);
字符串s
就是:"00000012"
,其長度(s.length())
為8,即s
在12的左面添加了6個數字0。
8.8.3 格式化浮點數
- 1.
float
,Float
,double
和Double
%f
,%e(%E)
,%g(%G)
和%a(%A)
格式符可格式化float、Float、double和Double:%f
將值格式化為十進制浮點數,小數保留6位。%e(%E)
將值格式化為科學記數法的十進制的浮點數(%E在格式化時將其中的指數符號大寫,例如5E10)。
- 2.修飾符
- 加號修飾符"+"格式化正數時,強制添加上正號,例如%+f將123.78格式化為"+123.78", %+E將123.78格式化為"+1.2378E+2"。
- 逗號修飾符“,”格式化浮點數時,將整數部分按“千”分組。
3.限制小數位數與數據的“寬度”
"%.nf"
可以限制小數的位數,其中的n是保留的小數位數,例如%.3f
將6.1256
格式化為"6.126"
(保留3位小數)。
規定寬度的一般格式為“%mf”
(在數字的左面增加空格),或“%-md”
(在數字的右面增加空格)。注:如果實際數字的寬度大于格式中指定的寬度,就按數字的實際寬度進行格式化
9.Class類與Console類——8.9知識
8.9.1 Class類
- 1.使用Class的類方法得到一個和某類(參數
className
指定的類)相關的Class對象:public static Class forName(String className) throws ClassNotFoundException
??
上述方法返回一個和參數className
指定的類相關的Class對象。如果類在某個包中,className
必須帶有包名,例如,className="java.util.Date"
。 - 2.步驟1中獲得的Class對象調用
public Object newInstance() throws Exception
方法就可以得到一個className
類的對象。
要特別注意的是:使用Class對象調用newInstance()
實例化一個className類的對象時,className類必須有無參數的構造方法。
8.9.2 Console類
如果希望在鍵盤輸入一行文本,但不想讓該文本回顯,即不在命令行顯示,那么就需要使用java.io
包中的Console類的對象來完成。
首先使用System類調用console()
方法返回一個Console類的一個對象,比如cons
:Console cons = System.console();
然后,cons
調用readPassword()
方法讀取用戶在鍵盤輸入的一行文本,并將文本以一個char
數組返回:char[] passwd = cons.readPassword();
8.10 Pattern類與Matcher類
Pattern類和Matcher類在java.util.regex包中。
以下結合具體問題來講解使用Pattern類和Matcher類的步驟。假設有字符串:String input = "hello,good morning,this is a good idea"
我們想知道input
從哪個位置開始至哪個位置結束曾出現了字符串good
。
使用Pattern類和Matcher類檢索字符串str
中的子字符串的步驟如下:
- 1.建立模式對象
使用正則表達式regex
做參數得到一個稱為模式的Pattern類的實例pattern
:
例如:
String regex = "good";
Pattern pattern = Pattern.compile(regex);
模式對象是對正則表達式的封裝。Pattern類調用類方法compile(String regex)
返回一個模式對象,其中的參數regex是一個正則表達式, 稱為模式對象使用的模式。
- 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
指定的字符串得到的。
二、腳本截圖
三、學習感受
- 本周的學習內容相較于上周較為簡單,重點在于正則表達式,理解起來比較費勁,之后也會對這一部分進行鞏固的。
- 本周的結對項目進入了完善和整合階段,進行了整體總結
- 本周的團隊項目也對之前的《需求規格說明書》和團隊分工進行了完善,確定分工