JAVA學習筆記_常用API
1. 什么叫API
-
概述:
API(Application Programming Interface)
贮缅,應用程序編程接口。Java API是一本程序員的 字典 真朗,是JDK中提供給我們使用的類的說明文檔棍厂。這些類將底層的代碼實現(xiàn)封裝了起來棕孙,我們不需要關心這些類是如何實現(xiàn)的,只需要學習這些類如何使用即可脖律。所以我們可以通過查詢API的方式谢肾,來學習Java提供的類,并得知如何使用它們 小泉。 -
API使用步驟:
- 打開幫助文檔芦疏。
- 點擊顯示,找到索引微姊,看到輸入框酸茴。
- 你要找誰?在輸入框里輸入兢交,然后回車薪捍。
- 看包。
java.lang
下的類不需要導包,其他需要酪穿。 - 看類的解釋和說明凳干。
- 學習構造方法。
- 使用成員方法昆稿。
2. Scanner類
- 什么是Scanner類
一個可以使用正則表達式來解析基本類型和字符串的簡單文本掃描器纺座。
-
使用
Scanner sc = new Scanner(System.in); int i = sc.nextInt();
備注:
System.in
系統(tǒng)輸入指的是通過鍵盤錄入數(shù)據(jù)。 Scanner使用步驟
引用類型的一般使用步驟:
導包
import
包路徑.類名稱;
如果需要使用的目標類溉潭,和當前類位于同一個包下净响,則可以省略導包語句不寫。
只有java.lang
包下的內(nèi)容不需要導包喳瓣,其他的包都需要import
語句馋贤。創(chuàng)建
類名稱 對象名 = new 類名稱();使用
對象名.成員方法名()
import java.util.Scanner; //導包
public class DemoScanner {
public static void main(String[] args) {
// 2. 創(chuàng)建
// 備注:System.in代表從鍵盤進行輸入
Scanner sc = new Scanner(System.in);
// 3. 獲取鍵盤輸入的int數(shù)字
int num = sc.nextInt();
System.out.println("輸入的int數(shù)字是:" + num);
// 4. 獲取鍵盤輸入的字符串
String str = sc.next();
System.out.println("輸入的字符串是:" + str);
}
}
3. Random 類
Random類用來生成隨機數(shù)字。使用起來也是三個步驟:
- 導包
import java.util.Random;
- 創(chuàng)建
Random r = new Random();
// 小括號當中留空即可- 使用
獲取一個隨機的int數(shù)字(范圍是int所有范圍畏陕,有正負兩種):int num = r.nextInt()
獲取一個隨機的int數(shù)字(參數(shù)代表了范圍窒百,左閉右開區(qū)間):int num = r.nextInt(3)
實際上代表的含義是:[0,3)
酥泛,也就是0~2
-
實列生成100以內(nèi)的隨機整數(shù)
// 1.導包 import java.util.Random; public class DemoRandom { public static void main(String[] args) { // 2.創(chuàng)建 Random num_r = new Random(); for (int i = 0; i < 10; i++) { // 3.使用 int num = num_r.nextInt(100); System.out.println("Random number is : " + num); } } }
-
猜數(shù)字小游戲
import java.util.Random; import java.util.Scanner; public class DemoGuessRandomnum { public static void main(String[] args) { // 系統(tǒng)產(chǎn)生一個隨機數(shù)1‐100之間的廊驼。 Random r = new Random(); int number = r.nextInt(100) + 1; int num = 0; while (true) { // 鍵盤錄入我們要猜的數(shù)據(jù) Scanner sc = new Scanner(System.in); System.out.println("請輸入你要猜的數(shù)字(1‐100):"); int guessNumber = sc.nextInt(); num++; // 比較這兩個數(shù)據(jù)(用if語句) if (guessNumber > number) { System.out.println("你猜的數(shù)據(jù)" + guessNumber + "大了"); } else if (guessNumber < number) { System.out.println("你猜的數(shù)據(jù)" + guessNumber + "小了"); } else { System.out.println("恭喜你,猜中了"); System.out.println("一共猜了" + num + "次"); System.out.println("游戲結束......"); break; } } } }
4. ArrayList 類
數(shù)組的長度不可以發(fā)生改變熙涤。
但是ArrayList
集合的長度是可以隨意變化的。對于
ArrayList<E>
來說鞠绰,有一個尖括號<E>代表泛型腰埂。
泛型:也就是裝在集合當中的所有元素,全都是統(tǒng)一的什么類型蜈膨。泛型只能是引用類型屿笼,不能是基本類型。注意事項:
對于ArrayLis
t集合來說翁巍,直接打印得到的不是地址值驴一,而是內(nèi)容。
如果內(nèi)容是空灶壶,得到的是空的中括號:[]
// 導包
import java.util.ArrayList;
public class DemoArrayList {
public static void main(String[] args) {
// 創(chuàng)建
ArrayList<String> list = new ArrayList<>();
// 使用
list.add("床前明月光肝断,");
System.out.println(list);
list.add("疑是地上霜。");
list.add("舉頭望明月例朱,");
list.add("低頭思故鄉(xiāng)孝情。");
System.out.println(list);
}
}
4.1 ArrayList 常用的方法
-
public boolean add(E e)
:向集合當中添加元素,參數(shù)的類型和泛型一致洒嗤。返回值代表添加是否成功(boolean 類型)。
備注:對于ArrayList
集合來說魁亦,add
添加動作一定是成功的渔隶,所以返回值可用可不用。但是對于其他集來說,add
添加動作不一定成功间唉。 -
public E get(int index):
從集合當中獲取元素绞灼,參數(shù)是索引編號,返回值就是對應位置的元素呈野。 -
public E remove(int index):
從集合當中刪除元素低矮,參數(shù)是索引編號,返回值就是被刪除掉的元素被冒。 -
public int size():
獲取集合的尺寸長度军掂,返回值是集合中包含的元素個數(shù)。
4.2 存儲的基本數(shù)據(jù)類型
基本類型 包裝類(引用類型昨悼,包裝類都位于
java.lang
包下)
byte Byte
short Short
int Integer 【特殊】
long Long
float Float
double Double
char Character 【特殊】
boolean Boolean
import java.util.ArrayList;
public class DemoArrayListBasic {
public static void main(String[] args) {
ArrayList<String> listA = new ArrayList<>();
// 錯誤寫法蝗锥!泛型只能是引用類型,不能是基本類型
//ArrayList<int> listB = new ArrayList<>();
ArrayList<Integer> listC = new ArrayList<>();
listC.add(100);
listC.add(200);
System.out.println(listC); // [100, 200]
int num = listC.get(1);
System.out.println("第1號元素是:" + num);
}
}
-
實列
//題目: // 用一個大集合存入20個隨機數(shù)字(0-99)率触,然后篩選其中的偶數(shù)元素终议,放到小集合當中。 // 要求使用自定義的方法來實現(xiàn)篩選葱蝗。 import java.util.ArrayList; import java.util.List; import java.util.Random; public class Demo10Test04 { public static void main(String[] args) { Random r = new Random(); ArrayList<Integer> list_big = new ArrayList<>(); ArrayList<Integer> list = new ArrayList<>(); for (int i = 0; i < 20; i++) { list_big.add(r.nextInt(100)) ; } for (int i = 0; i < list_big.size(); i++) { if (list_big.get(i)%2 == 0){ list.add(list_big.get(i)); } } System.out.println(list_big); System.out.println(list); } }
5. String 類
java.lang.String
類代表字符串穴张。
API
當中說:Java
程序中的所有字符串字面值(如"abc"
)都作為此類的實例實現(xiàn)。
其實就是說:程序當中所有的雙引號字符串两曼,都是String類的對象皂甘。(就算沒有new
,也照樣是合愈。)
- 字符串的內(nèi)容永不可變叮贩。【重點】
- 正是因為字符串不可改變佛析,所以字符串是可以共享使用的益老。
- 字符串效果上相當于是
char[]
字符數(shù)組,但是底層原理是byte[]
字節(jié)數(shù)組寸莫。創(chuàng)建字符串的常見3+1種方式捺萌。
三種構造方法:
public String():
創(chuàng)建一個空白字符串,不含有任何內(nèi)容膘茎。
public String(char[] array):
根據(jù)字符數(shù)組的內(nèi)容桃纯,來創(chuàng)建對應的字符串。
public String(byte[] array):
根據(jù)字節(jié)數(shù)組的內(nèi)容披坏,來創(chuàng)建對應的字符串态坦。
一種直接創(chuàng)建:
String str = "Hello";
// 右邊直接用雙引號注意:直接寫上雙引號,就是字符串對象棒拂。
-
public boolean equals(Object obj)
:參數(shù)可以是任何對象伞梯,只有參數(shù)是一個字符串并且內(nèi)容相同的才會給true玫氢;否則返回false。如:
String 常用的四種創(chuàng)造方法
public class DemoStringBuild { public static void main(String[] args) { // 使用空參構造 String str1 = new String(); System.out.println("str1 = " + str1); // 使用字符數(shù)組創(chuàng)建 char[] charArray = {'A', 'B', 'C'}; String str2 = new String(charArray); System.out.println("str2 = " + str2); // 使用字節(jié)數(shù)組創(chuàng)建 byte[] byteArray = {88, 89, 90}; String str3 = new String(byteArray); System.out.println("str3 = " + str3); // 使用""直創(chuàng)建 String str4 = "直接創(chuàng)建"; System.out.println("str4 = " + str4); } }
5.1 字符串常量池
字符串常量池:程序當中直接寫上的雙引號字符串谜诫,就在字符串常量池中漾峡。
對于基本類型來說,== 是進行數(shù)值的比較喻旷。
對于引用類型來說生逸,== 是進行【地址值】的比較。
在創(chuàng)建String
時使用""
創(chuàng)建的字符串放在了字符串常量池中且预,而是new
創(chuàng)建的放在隊堆(heap)中
<img src=" http://www.fate-p.cn/img/01_StringConstPool.png" alt="StringConstPool.png" style="zoom: 67%;" />
public class StringPool {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
char[] charArray = {'a', 'b', 'c'};
String str3 = new String(charArray);
byte[] byteArray = {97, 98 ,99};
String str4 = new String(byteArray);
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str2 == str4); // false
}
}
-
字符串的內(nèi)容比較槽袄,可以使用兩個方法:
-
public boolean equals(Object obj)
:參數(shù)可以是任何對象,只有參數(shù)是一個字符串并且內(nèi)容相同的才會給true辣之;否則返回false掰伸。如:
String 常用的四種創(chuàng)造方法
public class DemoStringBuild {
public static void main(String[] args) {
// 使用空參構造
String str1 = new String();
System.out.println("str1 = " + str1);// 使用字符數(shù)組創(chuàng)建 char[] charArray = {'A', 'B', 'C'}; String str2 = new String(charArray); System.out.println("str2 = " + str2); // 使用字節(jié)數(shù)組創(chuàng)建 byte[] byteArray = {88, 89, 90}; String str3 = new String(byteArray); System.out.println("str3 = " + str3); // 使用""直創(chuàng)建 String str4 = "直接創(chuàng)建"; System.out.println("str4 = " + str4); }
}
- `public boolean equalsIgnoreCase(String str)`:忽略大小寫,進行內(nèi)容比較怀估。 ```java public class DemoStringEquals { public static void main(String[] args) { String str1 = "ABC"; char[] charArray = {'A', 'B', 'C'}; String str2 = new String(charArray); byte[] byteArray = {65, 66, 67}; String str3 = new String(byteArray); String str4 = "ABc"; String str5 = null; System.out.println(str1.equals(str2)); //true System.out.println(str3.equals(str2)); //true System.out.println(str2.equals(str4)); //false System.out.println(str2.equalsIgnoreCase(str3)); //true System.out.println("abc".equals(str5)); //推薦 false //System.out.println(str5.equals("abc")); //不推薦:報錯狮鸭,空指針異常 //NullPointerException } }
-
5.2 String 中的常用方法
5.2.1 與獲取相關的方法
public int length()
:獲取字符串當中含有的字符個數(shù),拿到字符串長度多搀。public String concat(String str)
:將當前字符串和參數(shù)字符串拼接成為返回值新的字符串歧蕉。public char charAt(int index)
:獲取指定索引位置的單個字符。(索引從0開始康铭。)public int indexOf(String str)
:查找參數(shù)字符串在本字符串當中首次出現(xiàn)的索引位置惯退,如果沒有返回-1值。
public class DemoStringGet {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "World";
// 獲取字符串的長度
System.out.println("str1的長度為:" + str1.length());
System.out.println("==============");
// 拼接
String str3 = str1.concat(str2);
System.out.println("str1 拼接 str2 = " + str3);
System.out.println("==============");
// 獲取字符串索引值位置的單個字符
System.out.println("str3中的第三個字符為: " + str3.charAt(2));
System.out.println("==============");
// 獲取查找的字符串參數(shù)在字符串中的第一次出現(xiàn)的位置,沒找到返回-1
String str4 = "JAVAJAVAJAVAJAVA";
System.out.println("AV在字符串str4中第一次出現(xiàn)的索引值為:" + str4.indexOf("AV"));
System.out.println("PP在字符串str4中第一次出現(xiàn)的索引值為:" + str4.indexOf("PP"));
}
}
5.2.2 字符串的截取方法
public String substring(int index)
:截取從參數(shù)位置一直到字符串末尾从藤,返回新字符串催跪。public String substring(int begin, int end)
:截取從begin
開始,一直到end
結束夷野,中間的字符串懊蒸。
備注:[begin,end)
,包含左邊悯搔,不包含右邊
public class DemoSubString {
public static void main(String[] args) {
String str1 = "HelloWorld";
String str2 = str1.substring(5);
System.out.println(str1); // HelloWorld骑丸,原封不動
System.out.println(str2); // World,新字符串
System.out.println("================");
String str3 = str1.substring(4, 7);
System.out.println(str3); // oWo
System.out.println("================");
}
}
5.2.3 字符串與轉換相關的方法
public char[] toCharArray()
:將當前字符串拆分成為字符數(shù)組作為返回值妒貌。public byte[] getBytes()
:獲得當前字符串底層的字節(jié)數(shù)組通危。public String replace(CharSequence oldString, CharSequence newString)
:將所有出現(xiàn)的老字符串替換成為新的字符串,返回替換之后的結果新字符串灌曙。
備注:CharSequence
意思就是說可以接受字符串類型菊碟。
public class DemoStringConvert {
public static void main(String[] args) {
// 轉換成為字符數(shù)組
char[] chars = "Hello".toCharArray();
System.out.println(chars[0]); // H
System.out.println(chars.length); // 5
System.out.println("==============");
// 轉換成為字節(jié)數(shù)組
byte[] bytes = "abc".getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
System.out.println("==============");
// 字符串的內(nèi)容替換
String str1 = "How do you do?";
String str2 = str1.replace("o", "*");
System.out.println(str1); // How do you do?
System.out.println(str2); // H*w d* y*u d*?
System.out.println("==============");
}
}
5.2.4 字符串的分割方法
public String[] split(String regex)
:按照參數(shù)的規(guī)則,將字符串切分成為若干部分在刺。注:
regex
使用的為正則表達式進行切割
public class DemoStringSplit {
public static void main(String[] args) {
String str = "aaa,AAA,ccc,DDD";
String[] array1 = str.split(",");
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i]);
}
}
}
附:正則表達式表
字符 | 描述 |
---|---|
\ | 將下一個字符標記為一個特殊字符框沟、或一個原義字符藏古、或一個向后引用增炭、或一個八進制轉義符忍燥。例如,“n "匹配字符"n "隙姿。"\n "匹配一個換行符梅垄。串行"\\ "匹配"\ "而"\( "則匹配"( "。 |
^ | 匹配輸入字符串的開始位置输玷。如果設置了RegExp對象的Multiline屬性队丝,^也匹配“\n "或"\r "之后的位置。 |
$ | 匹配輸入字符串的結束位置欲鹏。如果設置了RegExp對象的Multiline屬性机久,$也匹配“\n "或"\r "之前的位置。 |
* | 匹配前面的子表達式零次或多次赔嚎。例如膘盖,zo能匹配“z "以及"zoo "。等價于{0,}尤误。 |
+ | 匹配前面的子表達式一次或多次侠畔。例如,“zo+ "能匹配"zo "以及"zoo "损晤,但不能匹配"z "软棺。+等價于{1,}。 |
? | 匹配前面的子表達式零次或一次尤勋。例如喘落,“do(es)? "可以匹配"does "或"does "中的"do "。?等價于{0,1}最冰。 |
{n} |
n是一個非負整數(shù)瘦棋。匹配確定的n次。例如锌奴,“o{2} "不能匹配"Bob "中的"o "兽狭,但是能匹配"food "中的兩個o。 |
{n,} |
n是一個非負整數(shù)鹿蜀。至少匹配n次箕慧。例如,“o{2,} "不能匹配"Bob "中的"o "茴恰,但能匹配"foooood "中的所有o颠焦。"o{1,} "等價于"o+ "。"o{0,} "則等價于"o* "往枣。 |
{n,m} |
m和n均為非負整數(shù)伐庭,其中n<=m粉渠。最少匹配n次且最多匹配m次。例如圾另,“o{1,3} "將匹配"fooooood "中的前三個o霸株。"o{0,1} "等價于"o? "。請注意在逗號和兩個數(shù)之間不能有空格集乔。 |
? | 當該字符緊跟在任何一個其他限制符(,+,?去件,{n},{n,}扰路,{n,m*})后面時尤溜,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串汗唱,而默認的貪婪模式則盡可能多的匹配所搜索的字符串宫莱。例如,對于字符串“oooo "哩罪,"o+? "將匹配單個"o "授霸,而"o+ "將匹配所有"o "。 |
. | 匹配除“\ n "之外的任何單個字符识椰。要匹配包括"\ n "在內(nèi)的任何字符绝葡,請使用像"(.|\n) "的模式。 |
(pattern) | 匹配pattern并獲取這一匹配腹鹉。所獲取的匹配可以從產(chǎn)生的Matches集合得到藏畅,在VBScript中使用SubMatches集合,在JScript中則使用\( "或"\) "。 |
(?:pattern) | 匹配pattern但不獲取匹配結果力奋,也就是說這是一個非獲取匹配榜旦,不進行存儲供以后使用。這在使用或字符“(|) "來組合一個模式的各個部分是很有用景殷。例如"industr(?:y|ies) "就是一個比"industry|industries "更簡略的表達式溅呢。 |
(?=pattern) | 正向肯定預查,在任何匹配pattern的字符串開始處匹配查找字符串猿挚。這是一個非獲取匹配咐旧,也就是說,該匹配不需要獲取供以后使用绩蜻。例如铣墨,“Windows(?=95|98|NT|2000) "能匹配"Windows2000 "中的"Windows ",但不能匹配"Windows3.1 "中的"Windows "办绝。預查不消耗字符伊约,也就是說姚淆,在一個匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索屡律,而不是從包含預查的字符之后開始腌逢。 |
(?!pattern) | 正向否定預查,在任何不匹配pattern的字符串開始處匹配查找字符串疹尾。這是一個非獲取匹配上忍,也就是說,該匹配不需要獲取供以后使用纳本。例如“Windows(?!95|98|NT|2000) "能匹配"Windows3.1 "中的"Windows ",但不能匹配"Windows2000 "中的"Windows "腋颠。預查不消耗字符繁成,也就是說,在一個匹配發(fā)生后淑玫,在最后一次匹配之后立即開始下一次匹配的搜索巾腕,而不是從包含預查的字符之后開始 |
(?<=pattern) | 反向肯定預查,與正向肯定預查類擬絮蒿,只是方向相反尊搬。例如,“(?<=95|98|NT|2000)Windows "能匹配"2000Windows "中的"Windows "土涝,但不能匹配"3.1Windows "中的"Windows "佛寿。 |
(?<!pattern) | 反向否定預查,與正向否定預查類擬但壮,只是方向相反冀泻。例如“(?"能匹配" 3.1Windows"中的" Windows",但不能匹配" 2000Windows"中的" Windows`"蜡饵。 |
x|y | 匹配x或y弹渔。例如,“z|food "能匹配"z "或"food "溯祸。"(z|f)ood "則匹配"zood "或"food "肢专。 |
[xyz] | 字符集合。匹配所包含的任意一個字符焦辅。例如博杖,“[abc] "可以匹配"plain "中的"a "。 |
[^xyz] | 負值字符集合氨鹏。匹配未包含的任意字符欧募。例如,“[^abc] "可以匹配"plain "中的"p "仆抵。 |
[a-z] | 字符范圍跟继。匹配指定范圍內(nèi)的任意字符种冬。例如,“[a-z] "可以匹配"a "到"z "范圍內(nèi)的任意小寫字母字符舔糖。 |
[^a-z] | 負值字符范圍娱两。匹配任何不在指定范圍內(nèi)的任意字符。例如金吗,“[^a-z] "可以匹配任何不在"a "到"z "范圍內(nèi)的任意字符十兢。 |
\b | 匹配一個單詞邊界,也就是指單詞和空格間的位置摇庙。例如旱物,“er\b "可以匹配"never "中的"er ",但不能匹配"verb "中的"er "卫袒。 |
\B | 匹配非單詞邊界宵呛。“er\B "能匹配"verb "中的"er "夕凝,但不能匹配"never "中的"er "宝穗。 |
\cx | 匹配由x指明的控制字符。例如码秉,\cM匹配一個Control-M或回車符逮矛。x的值必須為A-Z或a-z之一。否則转砖,將c視為一個原義的“c "字符须鼎。 |
\d | 匹配一個數(shù)字字符。等價于[0-9]堪藐。 |
\D | 匹配一個非數(shù)字字符莉兰。等價于[^0-9]。 |
\f | 匹配一個換頁符礁竞。等價于\x0c和\cL糖荒。 |
\n | 匹配一個換行符。等價于\x0a和\cJ模捂。 |
\r | 匹配一個回車符捶朵。等價于\x0d和\cM。 |
\s | 匹配任何空白字符狂男,包括空格综看、制表符、換頁符等等岖食。等價于[ \f\n\r\t\v]红碑。 |
\S | 匹配任何非空白字符。等價于[^ \f\n\r\t\v]。 |
\t | 匹配一個制表符析珊。等價于\x09和\cI羡鸥。 |
\v | 匹配一個垂直制表符。等價于\x0b和\cK忠寻。 |
\w | 匹配包括下劃線的任何單詞字符惧浴。等價于“[A-Za-z0-9_] "。 |
\W | 匹配任何非單詞字符奕剃。等價于“[^A-Za-z0-9_] "衷旅。 |
\xn | 匹配n,其中n為十六進制轉義值纵朋。十六進制轉義值必須為確定的兩個數(shù)字長柿顶。例如,“\x41 "匹配"A "倡蝙。"\x041 "則等價于"\x04&1 "九串。正則表達式中可以使用ASCII編碼。. |
*num* | 匹配num寺鸥,其中num是一個正整數(shù)。對所獲取的匹配的引用品山。例如胆建,“(.)\1 "匹配兩個連續(xù)的相同字符。 |
*n* | 標識一個八進制轉義值或一個向后引用肘交。如果*n之前至少n個獲取的子表達式笆载,則n為向后引用。否則涯呻,如果n為八進制數(shù)字(0-7)凉驻,則n*為一個八進制轉義值。 |
*nm* | 標識一個八進制轉義值或一個向后引用复罐。如果*nm之前至少有nm個獲得子表達式涝登,則nm為向后引用。如果*nm之前至少有n個獲取效诅,則n為一個后跟文字m的向后引用胀滚。如果前面的條件都不滿足,若n和m均為八進制數(shù)字(0-7)乱投,則*nm將匹配八進制轉義值nm*咽笼。 |
*nml* | 如果n為八進制數(shù)字(0-3),且m和l均為八進制數(shù)字(0-7)戚炫,則匹配八進制轉義值nml剑刑。 |
\un | 匹配n,其中n是一個用四個十六進制數(shù)字表示的Unicode字符双肤。例如施掏,\u00A9匹配版權符號(?)钮惠。 |
5.3 字符串的簡單練習
題目:
鍵盤輸入一個字符串,并且統(tǒng)計其中各種字符出現(xiàn)的次數(shù)其监。
種類有:大寫字母萌腿、小寫字母、數(shù)字抖苦、其他
import java.util.Scanner;
public class DemoStringtest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個字符串");
String input_str = sc.next();
int countUpper = 0, countLower = 0, countNumber = 0, countOther = 0;
char[] charArray = input_str.toCharArray();
for (int i = 0; i < charArray.length; i++) {
if (charArray[i] >= '0' && charArray[i] <= '9') {
countNumber++;
} else if (charArray[i] >= 'A' && charArray[i] <= 'Z') {
countUpper++;
} else if (charArray[i] >= 'a' && charArray[i] <= 'z') {
countLower++;
} else {
countOther++;
}
}
System.out.println("大寫字母有:" + countUpper);
System.out.println("小寫字母有:" + countLower);
System.out.println("數(shù)字有:" + countNumber);
System.out.println("其他字符有:" + countOther);
}
}
6 Static 類
在一個類中如果一個成員變量使用了static關鍵字毁菱,那么這個變量不再屬于對象自己,而是屬于所在的類锌历。多個對象共享同一份數(shù)據(jù)贮庞。
一旦使用
static
修飾成員方法,那么這就成為了靜態(tài)方法究西。靜態(tài)方法不屬于對象窗慎,而是屬于類的。對于靜態(tài)的成員變量卤材、靜態(tài)的成員方法都推薦使用類名稱進行調用遮斥。
靜態(tài)變量:類名稱.靜態(tài)變量
靜態(tài)方法:類名稱.靜態(tài)方法()注意事項:
- 靜態(tài)不能直接訪問非靜態(tài)。
原因:因為在內(nèi)存當中是【先】有的靜態(tài)內(nèi)容扇丛,【后】有的非靜態(tài)內(nèi)容术吗。- 靜態(tài)方法當中不能用this。
原因:this代表當前對象帆精,靜態(tài)方法使用類名稱進行調用较屿。靜態(tài)代碼塊的格式:
static { // 靜態(tài)代碼塊的內(nèi)容 }
特點:
? 當?shù)谝淮斡玫奖绢悤r,靜態(tài)代碼塊執(zhí)行唯一的一次卓练。
? 靜態(tài)內(nèi)容總是優(yōu)先于非靜態(tài)隘蝎,所以靜態(tài)代碼塊比構造方法先執(zhí)行。靜態(tài)代碼塊的典型用途:
用來一次性地對靜態(tài)成員變量進行賦值襟企。
7 Arrays 工具類
java.util.Arrays
是一個與數(shù)組相關的工具類嘱么,里面提供了大量靜態(tài)方法,用來實現(xiàn)數(shù)組常見的操作整吆。
public static String toString(數(shù)組)
:將參數(shù)數(shù)組變成字符串(按照默認格式:[元素1, 元素2, ...])
public static void sort(數(shù)組)
:按照默認升序(從小到大)對數(shù)組的元素進行排序拱撵。備注:
- 如果是數(shù)值,
sort
默認按照升序從小到大- 如果是字符串表蝙,
sort
默認按照字母升序- 如果是自定義的類型拴测,那么這個自定義的類需要有
Comparable
或者Comparator
接口的支持。
import java.util.Arrays;
public class DemoArrays {
public static void main(String[] args) {
int[] intArray = {1, 2, 5, 4, 3, 9, 8};
// Arrays.toString() 將數(shù)組轉為字符串
System.out.println(Arrays.toString(intArray));
// Arrays.sort() 將數(shù)組按照降序排列
Arrays.sort(intArray);
System.out.println(Arrays.toString(intArray));
}
}
8 Math 工具類
java.util.Math
類是數(shù)學相關的工具類府蛇,里面提供了大量的靜態(tài)方法集索,完成與數(shù)學運算相關的操作。
public static double abs(double num)
:獲取絕對值。有多種重載务荆。
public static double ceil(double num)
:向上取整妆距。
public static double floor(double num)
:向下取整。
public static long round(double num)
:四舍五入函匕。
Math.PI
代表近似的圓周率常量(double)
娱据。
public class DemoMath {
public static void main(String[] args) {
// 取絕對值
System.out.println(Math.abs(3.14));
System.out.println(Math.abs(-320.56));
System.out.println("================");
// 向上取整(取大)
System.out.println(Math.ceil(3.9)); // 4.0
System.out.println(Math.ceil(-3.1)); // -3
System.out.println(Math.ceil(3.0)); // 3.0
System.out.println("================");
// 向下取整(取小)
System.out.println(Math.floor(30.1)); // 30.0
System.out.println(Math.floor(-30.9)); // -31.0
System.out.println(Math.floor(31.0)); // 31.0
System.out.println("================");
// 四舍五入(取整)
System.out.println(Math.round(20.4)); // 20
System.out.println(Math.round(10.5)); // 11
// π
System.out.println(Math.PI);
}
}