常見API整理【Scanner類、匿名對象、Random類以及ArrayList集合】
(一)、Scanner類
1.1 引用類型使用步驟
導包
使用import關鍵字導包,在類的所有代碼之前導包,引入要使用的類型,java.lang包下的所有類無需導入。
import 包名.類名;
1.2 創建對象
使用該類的構造方法,創建一個該類的對象。 格式:
數據類型 變量名 = new 數據類型(參數列表);
1.3 調用方法
調用該類的成員方法,完成指定功能。 格式:
變量名.方法名();
1.4 Scanner使用步驟
- 查看類
java.util.Scanner
:該類需要import導入後使用。 - 查看構造方法
public Scanner(InputStream source)
: 構造一個新的Scanner
,它生成的值是從指定的輸入流掃描的。 - 查看成員方法
public int nextInt()
:將輸入信息的下一個標記掃描爲一個int
值。 - 使用Scanner類,完成接收鍵盤錄入數據的操作,代碼如下:
//1. 導包
import java.util.Scanner;
public class Demo01_Scanner {
public static void main(String[] args) {
//2. 創建鍵盤錄入數據的對象
Scanner sc = new Scanner(System.in);
//3. 接收數據
System.out.println("請錄入一個整數:");
int i = sc.nextInt();
//4. 輸出數據
System.out.println("i:"+i);
}
}
(二)、匿名對象【瞭解】
2.1 概念
- 創建對象時,只有創建對象的語句,卻沒有把對象地址值賦值給某個變量。雖然是創建對象的簡化寫法,但是應用場景非常有限。
- 匿名對象 :沒有變量名的對象。
格式:
new 類名(參數列表);
舉例:
new Scanner(System.in);
2.2 應用場景
- 創建匿名對象直接調用方法,沒有變量名。
new Scanner(System.in).nextInt();
- 一旦調用兩次方法,就是創建了兩個對象,造成浪費,請看如下代碼。注意:一個匿名對象,只能使用一次。
new Scanner(System.in).nextInt();
new Scanner(System.in).nextInt();
- 匿名對象可以作爲方法的參數和返回值
- 作爲參數:
class Test {
public static void main(String[] args) {
// 普通方式
Scanner sc = new Scanner(System.in);
input(sc);
//匿名對象作爲方法接收的參數
input(new Scanner(System.in));
}
public static void input(Scanner sc){
System.out.println(sc);
}
}
- 作爲返回值
class Test2 {
public static void main(String[] args) {
// 普通方式
Scanner sc = getScanner();
}
public static Scanner getScanner(){
//普通方式
//Scanner sc = new Scanner(System.in);
//return sc;
//匿名對象作爲方法返回值
return new Scanner(System.in);
}
}
(三)、Random使用步驟
- 查看類
java.util.Random
:該類需要 import導入使後使用。 - 查看構造方法
public Random()
:創建一個新的隨機數生成器。 - 查看成員方法
public int nextInt(int n)
:返回一個僞隨機數,範圍在0
(包括)和 指定值n
(不包括)之間的
int
值。
獲取一個隨機的int數字(範圍是int所有範圍,有正負兩種);int num = r.nextInt()
獲取一個隨機的int數字(參數代表了範圍,左閉右開區間);int num = r.nextInt()
使用Random類,完成生成3個10以內的隨機整數的操作,代碼如下:
//1. 導包
import java.util.Random;
public class Demo01_Random {
public static void main(String[] args) {
//2. 創建鍵盤錄入數據的對象
Random r = new Random();
for(int i = 0; i < 3; i++){
//3. 隨機生成一個數據
int number = r.nextInt(10);
//4. 輸出數據
System.out.println("number:"+ number);
}
}
}
備註:創建一個 Random 對象,每次調用 nextInt() 方法,都會生成一個隨機數
(四)、ArrayList集合
- 數組的長度不可以發生改變。但是ArrayList集合的長度是可以隨意發生變化的。
對於ArrayLIst來說,有一個尖括號< E >代表泛型。
- 泛型:也就是在集合當中的所有元素,全都是統一的什麼類型。
注意:泛型只能是引用類型,不能是基本類型。
import java.util.ArrayList;
public class Demo02Anonymous {
public static void main(String[] args) {
//創建了一個ArrayList集合,集合的名稱是list,裏面裝的都是String字符串類型的數據
//備註:從JDK1.7+ 開始,右側的尖括號可以不寫內容,但是<> 本身還是要寫的。
ArrayList<String> List = new ArrayList<String>();
System.out.println(List); // []
}
}
- 注意事項:對於ArrayList集合來說,直接打印得到的不是地址值,而是內容。如果內容爲空,得到的是空的中括號:[ ]
4.1 add:將指定的元素添加到此集合的尾部。
public boolean add(E e) :向集合當中添加元素,參數的類型和泛型一致。【返回值代表添加是否成功。】
//添加元素
list.add("hello");
list.add("world");
list.add("java");
boolean success = list.add("流言");
System.out.println(list); // [流言]
System.out.println("添加的動作是否成功:" + success); // true
注意:對於ArrayList集合來說,add添加動作一定是成功的,所以返回值可用可不用。
但是對於其他集合來說,add添加動作不一定成功。
4.2 get(int index):返回此集合中指定位置上的元素。返回獲取的元素。
public E get(int index):從集合當中獲取元素,參數是索引編號,返回值就是對應位置的元素。
//從集合中獲取元素:get。 索引值從0開始。
String name = list.get(2);
System.out.println("第二號索引位置:"+name);
4.3 remove(int index):移除此集合中指定位置上的元素。返回被刪除的元素。
public E remove(int index):從集合當中刪除元素,參數是索引編號,返回值就是被刪除掉的元素。
//從集合中刪除元素:remove索引值從0開始。
String whoRemoved = list.remove(3);
System.out.println("被刪除的是:"+whoRemoved);
System.out.println(list);
4.4 size():返回此集合中的元素數。遍歷集合時,可以控制索引範圍,防止越界。
public int size():獲取集合的尺寸長度,返回值是集合中包含的元素個數。
//獲取集合的長度尺寸,也就是其中的元素個數
int size = list.size();
System.out.println("集合的長度是:" + size);
- 遍歷集合
import java.util.ArrayList;
public class Demo02Anonymous {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("迪麗熱巴");
list.add("古力娜扎");
list.add("馬爾扎哈");
//遍歷集合
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
4.5 ArrayList集合存儲基本數據類型
如果希望向集合ArrayList當中存儲基本類型數據,必須使用基本類型對應的" 包裝類 "。
public class Demo02ArrayListMethod {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println(list);
}
}
- 從JDK 1.5+ 開始,支持自動裝箱、自動插箱。
- 自動裝箱:基本類型------> 包裝類型。
- 自動插箱:包裝類型------> 基本類型。
(五)、String類
java.lang.String
類代表字符串。API當中說:Java程序中的所有字符串字面值(如 “ abc ”)都作爲此類的實體實現。- 其實就是說:程序中所有的雙引號字符串,都是String類的對象。(就算沒有new,也照樣是。)
- 字符串的特點:①、字符串的內容不可變。②、正是因爲字符串不可改變,所以字符串是可以共享使用的。③、字符串效果上相當於是char[ ]字符數組,但是底層原理是byte [ ] 字節數組。
1、字符串常用方法
5.1.1 public String():創建一個空白字符串,不含有任何內容。
//使用空參構造
String str1 = new String();
//小括號留空,說明字符串什麼內容都沒有。
System.out.println(str1);
5.1.2 public String(char[ ] array):根據字符數組的內容,來創建對應的字符串。
//根據字符數組創建字符串
char[] charArray = {'A','B','C'};
String str2 = new String(charArray);
System.out.println(str2);// ----> ABC
5.1.3 public String(byte[ ] array):根據字節數組的內容,來創建對應的字符串。
//根據字節數組創建字符串
byte[] byteArray = {97,98,99};
String str3 = new String(byteArray);
System.out.println(str3);//----> abc
2、字符串的常量池
- 字符串常量池:程序當中直接寫上的雙引號字符串,就在字符串常量池中。
對於基本類型來說,==是進行數值的比較。對於引用類型來說,==是進行【地址值】的比較。
雙引號直接寫的字符串在常量池當中,new的不在常量池當中。
3、字符串的比較方法
- 如果確實需要字符串的內容比較,可以使用兩個方法:
- ①、
public boolean equals(Object obj)
:參數可以是任何對象,只有參數是一個字符串並且內容相同的纔會給true;否則返回false。 - 【注意:Ⅰ、任何對象都能用Object進行接受。Ⅱ、equals方法具有對稱性,也就是a.equals(b)和b.equals(a)效果一樣。Ⅲ、如果比較雙方一個常量一個變量,推薦把常量字符串寫在前面。】
String str5 = null;
System.out.println("abc".equals(str5));//推薦,false
System.out.println(str5.equals("abc"));//不推薦,報錯,空指針異常NullPorinterException
- ②、
public boolean equalsIgnoreCase(String str):
忽略大小寫,進行內容比較。
String strA = "Java";
String strB = "java";
System.out.println(strA.equals(strB));//false,忽略大小寫
System.out.println(strA.equalsIgnoreCase(strB));//true,忽略大小寫
4、字符串的獲取相關方法
- 5.4.1 public int length():獲取字符串當中含有的字符個數,拿到字符串長度。
//獲取字符串的長度
int length = "hello".length();
System.out.println(length);//5
- 5.4.2 public String concat(String str):將當前字符串和參數字符串拼接成爲返回值新的字符串。
//拼接字符串
String str1 = "Hello";
String str2 = "World";
String str3 = str1.concat(str2);
System.out.println(str1);//Hello,原封不動
System.out.println(str2);//World,原封不動
System.out.println(str3);//HelloWorld,新的字符串
- 5.4.3 public char charAt(int index):獲取指定索引位置的單個字符串(從0開始)。
//獲取指定索引位置的單個字符
char ch = "Hello".charAt(1);
System.out.println(ch);//e
- 5.4.4 public int indexOf(String str):查找參數字符串在本字符串當中首次出現的索引位置,如果沒有,返回-1值。
//查找參數字符串在本來字符串當中出現的第一次索引位置
//如果根本沒有。返回-1值。
String original = "HelloWorldHelloWorld";
int index = original.indexOf("llo");
System.out.println(index);//2
System.out.println("HelloWorld".indexOf("abc"));//-1
5、字符串的截取方法
- public String substring(int index):截取從參數位置一直到字符串末尾,返回新字符串。
- public String substring(int begin,int end):截取從begin開始,一直到end結束,中間的字符串。【注意:[ begin,end ) :包含左邊,不包含右邊】
String str1 = "HelloWorld";
String str2 = str1.substring(5);
System.out.println(str1);//HelloWorld,原封不動
System.out.println(str2);//World,新字符串
String str3 = str1.substring(4,7);
System.out.println(str3);
//下面這種寫法,字符串的內容仍然是沒有改變的
//下面有兩個字符串,"Hello","Java"
//strA當中保存的是地址值。
//本來地址值是Hello的0x666
//後來地址值變成了Java的0x999
String strA = "Hello";
System.out.println(strA);
strA = "Java";
System.out.println(strA);
6、字符串的轉換方法
- 5.6.1 public char[ ] toCharArray():將當前字符串拆分成字符數組作爲返回值。
//轉換成爲字符串數組
char[] chars = "Hello".toCharArray();
System.out.println(chars[0]);//H
System.out.println(chars.length);//5
- 5.6.2 public byte[ ] getBytes():獲得當前字符串底層的字節數組。
//轉換爲字節數組
byte[] bytes = "abc".getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
- 5.6.3 public String replace(CharSequence oldString,CharSequence newString):將所有出現的老字符串替換成新的字符串,返回替換之後的結果新字符串。
- 【注意:CharSequence意思就是說可以接受字符串類型】
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*?
7、字符串的分割方法
- public String[ ] split(String regex):按照參數的規則,將字符串切分成若干部分。
String str1 = "aaa,bbb,ccc";
String[] array1 = str1.split(",");
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i]);
}//按照","分割--->aaa bbb ccc
- 【注意事項:split方法的參數其實是一個“正則表達式”,如果按照英文句點" . " 進行分割,必須寫" \. " (兩個反斜槓)】
String str3 ="XXX.YYY.ZZZ";
String[] array3 = str3.split("\\.");
System.out.println(array3.length);
for (int i = 0; i < array3.length; i++) {
System.out.println(array3[i]);
}//按照"."分割--->XXX YYY ZZZ