API
API概述
API (Application Programming Interface) :應用程式程式設計接口
java中的API指的就是 JDK 中提供的各種功能的 Java類,這些類将底層的實作封裝了起來
鍵盤錄入字元串
Scanner類 :
next() : 遇到了空格, 就不再錄入資料了 , 結束标記: 空格, tab鍵
nextLine() : 可以将資料完整的接收過來 , 結束标記: 回車換行符
nextInt和nextLine方法配合使用的時候, nextLine方法就沒有鍵盤錄入的機會了
建議: 今後鍵盤錄入資料的時候, 如果是字元串和整數一起接受, 建議使用next方法接受字元串
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入整數:");
int num = sc.nextInt(); // 10 + 回車換行
System.out.println("請輸入字元串:");
String s = sc.nextLine();
System.out.println(num);
System.out.println(s);
}
String類
String概述
1 String 類在 java.lang 包下,是以使用的時候不需要導包
2 String 類代表字元串,Java 程式中的所有字元串文字(例如“abc”)都被實作為此類的執行個體也就是說,Java 程式中所有的雙引号字元串,都是 String 類的對象
3 字元串不可變,它們的值在建立後不能被更改
String類的構造方法
public String() : 建立一個空白字元串對象,不含有任何内容 String s1 = new String();
public String(char[] chs) : 根據字元數組的内容,來建立字元串對象
char[] chs = {\'a\',\'b\',\'c\'}; String s2 = new String(chs);
public String(String original) : 根據傳入的字元串内容,來建立字元串對象 String s3 = new String("123");
String s = “abc”; 直接指派的方式建立字元串對象,内容就是abc
建立字元串對象的差別對比
通過構造方法建立
通過 new 建立的字元串對象,每一次 new 都會申請一個記憶體空間,雖然内容相同,但是位址值不同
直接指派方式建立
以“”方式給出的字元串,隻要字元序列相同(順序和大小寫),無論在程式代碼中出現幾次,JVM 都隻會建立一個 String 對象,并在字元串常量池中維護
(從jdk7開始,字元串常量池轉移到堆區)
字元串在字元串常量池中:
不存在:建立
存在:不建立,直接複用
String s1="abc";
String s2="ab";
String s3=s2+"c";
System.out.println(s3==s1) //false
String s1="abc";
String s2="a"+"b"+"c";
System.out.println(s1==s2) //true
字元串變量與字元串變量或者字元串變量與字元串常量用”+“串聯時,系統底層會自動建立一個StringBuilder對象,再調用append方法完成拼接,最後調用toString方法轉換為String類型。
字元串常量之間做拼接時:java存在常量優化機制,會将"a"+"b"+"c"轉換為"abc"
字元串的比較
String s1 = "abc";
String s2 = "ABC";
String s3 = "abc";
equals : 比較字元串内容, 區分大小寫
System.out.println(s1.equals(s2)); //false
System.out.println(s1.equals(s3)); //true
equalsIgnoreCase : 比較字元串内容, 忽略大小寫
System.out.println(s1.equalsIgnoreCase(s2)); //true
周遊字元串
public char charAt(int index):傳回指定索引處的char值,字元串的索引也是從0開始的
public static void main(String[] args) {
// 1. 鍵盤錄入一個字元串,用 Scanner 實作
Scanner sc = new Scanner(System.in);
System.out.println("請輸入:");
String s = sc.nextLine();
// 2. 周遊字元串,首先要能夠擷取到字元串中的每一個字元
for(int i = 0; i < s.length(); i++){
// i : 字元串的每一個索引
char c = s.charAt(i);
System.out.println(c);
}
}
public char[] toCharArray( ):将目前字元串拆分為字元數組并傳回
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入:");
String s = sc.nextLine();
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
}
字元串截取
String substring(int index) 從index開始截取字元串到結尾,傳回String
String substring(int start,int end) 從start開始截取字元串到end(包含頭,不包含尾),傳回String
// 1. 鍵盤錄入一個字元串,用 Scanner 實作
Scanner sc = new Scanner(System.in);
System.out.println("請輸入手機号:");
String telString = sc.nextLine();
// 2. 截取字元串前三位
String start = telString.substring(0,3);
// 3. 截取字元串後四位
String end = telString.substring(7);
// 4. 将截取後的兩個字元串,中間加上****進行拼接,輸出結果
System.out.println(start + "****" + end);
字元串替換
String replace(CharSequence target, CharSequence replacement) 将目前targ的内容替換為replacement的内容
// 1. 鍵盤錄入一個字元串,用 Scanner 實作
Scanner sc = new Scanner(System.in);
System.out.println("請輸入:");
String s = sc.nextLine();
// 2. 替換敏感詞
String result = s.replace("TMD","***");
// 3. 輸出結果
System.out.println(result);
切割字元串
String[] split(String regex, int limit) 根據傳入字元串作為規則進行切割,regex是正規表達式分隔符,并将切割的字元串存入字元串數組,最後将字元串數組傳回,limit是分割份數
// 鍵盤錄入一個字元串,用 Scanner 實作
Scanner sc = new Scanner(System.in);
System.out.println("請輸入學生資訊:");
String stuInfo = sc.nextLine();
// stuInfo = "張三,23";
// 根據逗号切割字元串,得到(張三)(23)
String[] sArr = stuInfo.split(",");
// System.out.println(sArr[0]);
// System.out.println(sArr[1]);
注意: . 、 $、 | 和 * 等轉義字元,必須得加 \\。
注意:多個分隔符,可以用 | 作為連字元。
public class Test {
public static void main(String args[]) {
String str = new String("Welcome-to-Runoob");
System.out.println("- 分隔符傳回值 :" );
for (String retval: str.split("-")){
System.out.println(retval);
}
System.out.println("");
System.out.println("- 分隔符設定分割份數傳回值 :" );
for (String retval: str.split("-", 2)){
System.out.println(retval);
}
System.out.println("");
String str2 = new String("www.runoob.com");
System.out.println("轉義字元傳回值 :" );
for (String retval: str2.split("\\.", 3)){
System.out.println(retval);
}
System.out.println("");
String str3 = new String("acount=? and uu =? or n=?");
System.out.println("多個分隔符傳回值 :" );
for (String retval: str3.split("and|or")){
System.out.println(retval);
}
}
}
- 分隔符傳回值 :
Welcome
to
Runoob
- 分隔符設定分割份數傳回值 :
Welcome
to-Runoob
轉義字元傳回值 :
www
runoob
com
多個分隔符傳回值 :
acount=?
uu =?
n=?
StringBuilder類
StringBuilder類概述
概述 : StringBuilder 是一個可變的字元串類,我們可以把它看成是一個容器,這裡的可變指的是 StringBuilder 對象中的内容是可變的
構造方法
public StringBuilder() 建立一個空白可變字元串對象,不含有任何内容
public StringBuilder(String str) 根據字元串的内容,來建立可變字元串對象
StringBuilder sb = new StringBuilder();
StringBuilder sb2 = new StringBuilder("hello");
StringBuilder常用的成員方法
append / reverse
public StringBuilder append(任意類型) 添加資料,并傳回對象本身
public StringBuilder reverse() 傳回相反的字元序列
sb.append("hello").append("world").append("java").append(100);可鍊式程式設計
sb.reverse();
append傳回對象本身(類似C++的引用),可以鍊式程式設計,也可以用多個StringBuilder對象控制同一個對象
StringBuilder sb=StringBuilder("hello");
StringBuilder s=sb.append(" world");
System.out.println(s); //hello world
toString()
public String toString() //通過 toString() 就可以實作把 StringBuilder 轉換為 String
public StringBuilder(String s) //通過構造方法就可以實作把 String 轉換為 StringBuilder
StringBuilder sb=new StringBuilder("hello");
String s = sb.toString(); //StringBuilder-->String
StringBuilder sb = new StringBuilder(s); //String-->StringBuilder
StringBuilder提高效率原理
String拼接:

StringBuilder拼接:
案例1:判斷回文字
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s1=sc.nextLine();
StringBuilder sb1= new StringBuilder(s1);
sb1.reverse();
String sb=sb1.toString();
if(sb.equals(s1)){
System.out.println("是回文字");
}else{
System.out.println("不是回文字");
}
}
案例2:StringBuilder拼接字元串
定義一個方法,把 int 數組中的資料按照指定的格式拼接成一個字元串傳回,調用該方法,并在控制台輸出結果。例如,數組為int[] arr = {1,2,3}; ,執行方法後的輸出結果為:[1, 2, 3]
public static void main(String[] args) {
int[] a={1,2,3};
String s=toArryString(a);
System.out.println(s);
}
public static String toArryString(int[] a){
StringBuilder sb=new StringBuilder();
sb.append("[");
for (int i = 0; i < a.length; i++) {
if(i==a.length-1){
sb.append(a[i]).append("]");
}else{
sb.append(a[i]).append(",");
}
}
String s=sb.toString();
return s;
}