03.數學函式、字元和字串
常用數學函式
java在Math類中提供了許多實用的方法(方法是一組語句,用於執行一個特定的任務),來計算常用的數學函式。
三角函式方法
sin(radians):返回以弧度為單位的角度的三角正弦函式值 cos(radians):返回以弧度為單位的角度的三角餘弦函式值 tan(radians):返回以弧度為單位的角度的三角正切函式值 toRadians(degree):將以度為單位的角度值轉換為以弧度顯示 toDegrees(radians):將以弧度為單位的角度值轉換為以度顯示 asin(a):返回以弧度為單位的角度的反三角正弦函式值 acos(a):返回以弧度為單位的角度的反三角餘弦函式值 atan(a):返回以弧度為單位的角度的反三角正切函式值
指數函式方法
exp(x):返回e的x次方
log(x):返回x的自然底數
log10(x):返回x的以10為底的對數
pow(a,b):返回a的b次冪
sqrt(x):返回x的平方根(x >= 0)
取整方法
ceil(x):向上取整,返回一個不小於x的最小整數
floor(x):向下取整,返回一個不大於x的最大整數
rint(x):取最接近x的整數
round(x):四捨五入取整
min、max、abs和random方法
min和max方法用於返回兩個數的最小值和最大值,abs方法返回一個數的絕對值
random():生成大於等於0.0且小於1.0的double型隨機數。
字元資料型別和操作
字元資料型別表示單個字元。字元資料型別用char來表示單個字元。字元型直接量用單引號括住。
char letter = 'A'; char numChar = '5'; //字串直接量必須括在雙引號中。而字元直接量是括在單引號中的單個字元。因此"A"是一個字串,而'A'是一個字元。
Unicode和ASC2碼
計算機內部使用二進位制。一個字元在計算機中是以0和1構成的序列的形式來儲存的。將字元對映到它的二進位制形式的過程稱為編碼(encoding)。字元有多種不同的編碼方式,編碼表定義該如何編碼每個字元。
java支援Unicode編碼(Unicode又稱為統一碼、萬國碼、單一碼,是國際組織制定的旨在容納全球所有字元的編碼方案,包括字符集、編碼方案等,它為每種語言中的每個字元設定了統一且唯一的二進位制編碼,以滿足跨語言、跨平臺的要求。)Unicode碼一開始被設計為16位的字元編碼。基本資料型別char試圖通過提供一種能夠存放任意字元的簡單資料型別來利用這個設計。但是,一個16位的編碼能產生的字元只有655536個,它是不足以表示全世界所有字元的。因此,U能從的標準被擴充套件為1 112 064個字元。這些字元都遠超了原來的16位限制。它們稱為補充字元。java支援這些補充字元。這些字元都可以儲存在一個char型變數中。
一個16位Unicode碼佔兩個位元組,用以\u開頭的4位16進位制數表示。範圍從'\u0000'到'\uFFFF'.大多數計算機採用ASCII碼(美國標準資訊交換碼),它是所有大小寫字母、數字、標點符號和控制符的8位編碼表。Unicode碼包括ASCII碼,從'\u0000'到'\u007F‘對應128個ASCII字元。
java程式中,可以使用像'a'、'5'和'&'這樣的ASCII字元,也可以使用Unicode碼。例如,下面的語句是等價的
char letter = 'A'; char letter = '\u0041'; //自增和自減操作符也可用在char型變數上。這會得到該字元之前或之後的Unicode字元 char ch = 'a'; System.out.println(ch++);
特殊字元的轉義序列
假如你想定義帶引號的資訊,你能編寫如下所示的這條語句嗎?
String message = "魯迅曾經說過:"老子沒有說過"";
答案是不能 ,這條語句有語法錯誤,編譯器會認為第二個引號為字串的結束標識,而剩下的內容不知道怎麼處理。為了解決這個問題,java使用轉義序列,轉義序列由反斜槓(\)後面加上一個字元或者一些數字組成。比如\t表示tab字元的轉義符,而諸如\u03b1的轉義符用於表示一個Unicode。一個轉義蓄力被當作一個字元進行翻譯。
所以,現在可以使用下面語句定義帶引號的字串
String message = "魯迅曾經說過:\"老子沒有說過\"";
反斜槓\被稱之為轉義字元。它是一個特殊字元,要顯示這個字元,需要使用轉義序列\\.
表示 | 含義 |
---|---|
\n |
換行符 |
\t |
橫向製表符 |
\\ |
反斜線 |
\' |
單引號 |
\" |
雙引號 |
\r |
回車符 |
\b |
退格符 |
\f |
換頁符 |
字元型資料與數值型資料間的轉換
char型資料可以轉換成任意一種數值型別,反之亦然。將整數轉成char型資料時,只用到該資料的低16位,其餘部分被忽略。
字元的比較和測試
兩個字元可以使用關係操作符進行比較,如同比較兩個數字一樣。因為時通過比較兩個字元的Unicode值實現的。為了方便,Java的Character類提供了下列方法用於進行字元測試。
isDigit(ch):指定字元ch是否是一個數字。
isLetter(ch):指定字元ch是否是一個字母。
isLetterOrDigit(ch):指定字元ch是否是一個字母或者數字
isLowerCase(ch):指定字元ch是否是一個小寫字母
isUpperCase(ch):指定字元ch是否是一個大寫字母
toLowerCase(ch):返回ch的小寫形式
toUpperCase(ch):返回ch的大寫形式
String型別
char只能表示一個字元。為了表示一串字元,使用String的資料型別。例如:
String message = "welcome to java!";
String型別不是基本資料型別,而是引用型別。這裡message是一個引用變數,它引用一個內容為welcome to java!的字串物件。
字串的常見操作
public int length():獲取字串當中含有的字元個數,返回字串長度。 public String concat(String str):將當前字串和引數字串str連線,返回值新的字串。 public char charAt(int index):獲取指定索引位置的單個字元。(索引從0開始。) public String toUpperCase():返回所有字母大寫的新字串 public String toLowerCase():返回所有字母小寫的新字串 public String trim(): 返回去掉兩邊空白字元的新字串。 //字串比較 public boolean equals(String str):如果該字串等於字串str,返回true public boolean equalsIgnoreCase(String str):如果該字串等於字串str,返回true.不區分大小寫 public int compareTo(String str):返回一個大於0、等於0、小於0的整數,表明一個字串是否大於、等於或者小於str public int compareToIgnoreCase(String str):返回一個大於0、等於0、小於0的整數,表明一個字串是否大於、等於或者小於str。不區分大小寫 public boolean startsWith(String prefix): 返回字串是否以字首prefix開頭 public boolean endsWith(String suffix): 返回字串是否以後綴suffix結束 public boolean contains(String str): 檢查字串中是否包含子串str //字串擷取 public String substring(int begin):擷取字串,從特定位置begin的字元開始到字串結尾。 public String substring(int begin,int end):擷取字串,從特定位置begin的字元開始到end-1的字元。(長度為end - begin) //字串查詢,提供了幾個版本的indexOf和lastIndexOf方法 public int indexOf(String str):查詢引數字串在本字串當中首次出現str的索引位置,如果沒有返回-1值。 public int indexOf(String str,int fromIndex):查詢引數字串在本字串當中fromIndex之後首次出現str的索引位置,如果沒有返回-1值。 public int lastIndexOf(String str):查詢引數字串在本字串當中最後一個出現str的索引位置,如果沒有返回-1值。 public int lastIndexOf(String str,int fromIndex):查詢引數字串在本字串當中fromIndex之前出現最後一個str的索引位置,如果沒有返回-1值。
字串和數字間的轉換
String numString = "100"; byte byteNumber = Byte.parseByte(numString); short shortNumber = Short.parseShort(numString); int intNumber = Integer.parseInt(numString); long longNumber = Long.parseLong(numString); float flaotNumber = Float.parseFloat(numString); double doubleNumber = Double.parseDouble(numString);
前提條件是字串必須滿足各數值型的要求。將數值型轉為字串非常簡單,使用字串拼接一個空串即可:
int number = 200; String srt = number + "";
格式化控制檯輸出
System.out.printf(format,item1,item2,...itemn);這裡的format是指一個由子串和格式識別符號構成的字串。
格式識別符號指定每個條目應該如何顯示。條目可以是數值、字元、布林值或者字串。簡單的格式識別符號是以百分號%開頭的轉換碼。
識別符號 | 輸出 | 舉例 | 寬度和精度 | 輸出 |
%b | 布林值 | true或false | %6b | 6個字元寬度的boolean值,true在前面加兩個空格,false在前面加一個空格 |
%c | 字元 | 'a' | %5c | 在輸出的字元前加4個空格 |
%d | 十進位制整數 | 200 | %5d | 5個字元寬度的整數。如果該數字位數小於5,在前面補空格,如果大於5位,自動增加寬度 |
%f | 浮點數 | 3.1415 | %10.2f | 寬度至少為10,小數位2位。整數位為7位(包括小數點) |
%e | 科學計數法的數 | 0.314e1 | %10.2e | 寬度至少為10,小數位2位和指數部分。 |
%s | 字串 | "this is a pen" | %12s | 寬度至少為12,如果不夠12位,在前面補空格,如果大於12位,自動增加寬度 |
示例:字串反轉
示例:將十六進位制數轉為十進位制數