Java常用類
Object類:
類 Object 是類層次結構的根類。每個類都使用 Object 作爲超類(父類)。所有對象(包括數組)都實現這個類的方法。
hashCode();
public int hashCode()返回該對象的哈希碼值
hashCode()----->通過哈希算法(哈希表:hashtable)---->地址值(不是實際意義上的地址值!
package org.westos_10_常用類;
public class ObjectDemo01 {
public static void main(String[] args) {
Student s1 = new Student();
System.out.println(s1.hashCode());//隨機產生一個哈希值118352462
Student s2 = new Student();
System.out.println(s2.hashCode());//1550089733
System.out.println("love".hashCode());//3327858
System.out.println("---------------------");
//public final Class getClass()返回此 Object 的運行時類
Class c1 = s1.getClass() ;
System.out.println("c1:"+c1);//c1:class org.westos_10_常用類.Student
String name = c1.getName();
System.out.println("name: "+name);//name: org.westos_10_常用類.Student(全路徑名稱)
}
}
//隨機產生一個哈希值118352462
Student s2 = new Student();
System.out.println(s2.hashCode());//1550089733
System.out.println("love".hashCode());//3327858
System.out.println("---------------------");
//public final Class getClass()返回此 Object 的運行時類
Class c1 = s1.getClass() ;
System.out.println("c1:"+c1);//c1:class org.westos_10_常用類.Student
String name = c1.getName();
System.out.println("name: "+name);//name: org.westos_10_常用類.Student(全路徑名稱)
}
}
*toString();
public String toString();返回該對象的字符串表示(建議所有子類都重寫此方法)
Integer類中有一個方法:
public static String toHexString(int i):將一個int類型的數據轉換成一個十六進制的字符串表現形式
如果直接輸出對象名稱,想要顯示當前對象的成員變量的值,那麼必須重寫Object類中的toString()方法
//toString()重寫 自動生成 Alt+Shlft +s--->s
@Override
public String toString() {
return "Persen [name=" + name + ", age=" + age + "]";
}
public class ObjectDemo {
public static void main(String[] args) {
Persen p1 = new Persen("彭于晏 ",22);
System.out.println("p1: " +p1); //p1: org.westos_10_object.Persen@70dea4e
//toString方法重寫後打印 p1: Persen [name=彭于晏 , age=22]
System.out.println("toString: "+p1.toString());
System.out.println(p1.getClass().getName()+"@"+Integer.toHexString(p1.hashCode()));
//toString: org.westos_10_object.Persen@70dea4e toString: Persen [name=彭于晏 , age=22]
/*
查看源碼後:
public String toString() {
return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}
toString() 等價於 對象名.getClass().getName() +"@" +Integer.toHexString(對象名.hashCode())
*/
System.out.println("---------------------------------");
System.out.println(p1.getClass().getName()+"@"+Integer.toHexString(p1.hashCode()));
/* org.westos_10_object.Persen@70dea4e
直接對象名稱,想要顯示成員變量的值,怎麼辦?
重寫toString()方法 */
}
}
//p1: org.westos_10_object.Persen@70dea4e
//toString方法重寫後打印 p1: Persen [name=彭于晏 , age=22]
System.out.println("toString: "+p1.toString());
System.out.println(p1.getClass().getName()+"@"+Integer.toHexString(p1.hashCode()));
//toString: org.westos_10_object.Persen@70dea4e toString: Persen [name=彭于晏 , age=22]
/*
查看源碼後:
public String toString() {
return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}
toString() 等價於 對象名.getClass().getName() +"@" +Integer.toHexString(對象名.hashCode())
*/
System.out.println("---------------------------------");
System.out.println(p1.getClass().getName()+"@"+Integer.toHexString(p1.hashCode()));
/* org.westos_10_object.Persen@70dea4e
直接對象名稱,想要顯示成員變量的值,怎麼辦?
重寫toString()方法 */
}
}
*equal();
Object中的另一個方法:
public boolean equals(Object obj)指示其他某個對象是否與此對象“相等”。返回一個boolean類型
面試題:
== 和 equal()方法的區別
==:比較的是兩個對象的地址值是否相同,
equals()方法默認比較的是兩個對象的地址值是否相同,如果重寫了Object類中的equals()方法,那麼默認比較就是兩個對象的內容是否相同
使用工具自動生成equals()方法
在javascript:Array對象,Number對象,String對象,valueOf():====>s1.valueOf(s2) ;比較是內容是否相同
由於Object類中的equals()方法底層是通過"=="來實現的,所以默認比較的是地址值,如果想比較內容是否相同,需要重寫equals()方法
public class ObjectDemo_ {
public static void main(String[] args) {
//創建對象
Persen p1 = new Persen("李白",21);
Persen p2 = new Persen("李白",21);
System.out.println(p1 == p2);//地址不同 輸出false
System.out.println("------------------");
Persen p3 = p1 ;
System.out.println(p1==p3);//地址相同 true
System.out.println("-------------------");
System.out.println(p1.equals(p2));//false equals()方法默認比較的是地址值底層源碼依賴"=="
//想要比較內容必須重寫equals()方法
System.out.println(p1.equals(p2));//由於重寫equals()方法,所以比較的是對象的內容是否相同! true
}
}
//創建對象
Persen p1 = new Persen("李白",21);
Persen p2 = new Persen("李白",21);
System.out.println(p1 == p2);//地址不同 輸出false
System.out.println("------------------");
Persen p3 = p1 ;
System.out.println(p1==p3);//地址相同 true
System.out.println("-------------------");
System.out.println(p1.equals(p2));//false equals()方法默認比較的是地址值底層源碼依賴"=="
//想要比較內容必須重寫equals()方法
System.out.println(p1.equals(p2));//由於重寫equals()方法,所以比較的是對象的內容是否相同! true
}
}
Object類中的其他兩個方法:finalize()和clone()
protected void finalize()throws Throwable:當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法,
但是,什麼時候調用垃圾回收器不確定;
System類中的一個方法:
public void gc():運行垃圾回收器,這個垃圾回收器最終調用的就是finalize()方法
protected Object clone()創建並返回此對象的一個副本
throws CloneNotSupportedException
注意事項:
Object 類的 clone 方法執行特定的複製操作。首先,如果此對象的類不能實現接口 Cloneable,則會拋出 CloneNotSupportedException。異常
//重寫Object中的clone()方法
@Override
protected Object clone() throws CloneNotSupportedException {//拋出一個運行時異常
return super.clone();
}
@Override
protected Object clone() throws CloneNotSupportedException {//拋出一個運行時異常
return super.clone();
}
package org.westos_10_object_02;
import java.security.GeneralSecurityException;
public class ObjectDemo { //拋出聲明
public static void main(String[] args) throws CloneNotSupportedException {
Student s1 = new Student();
s1.setName("李榮浩");
s1.setAge(21);
System.out.println(s1.getName()+" -- "+s1.getAge());//李榮浩 -- 21
//複製s1對象
Object obj = s1.clone() ;
//向下轉型
Student s2 = (Student) obj;
System.out.println(s1.getName()+"----"+s2.getAge());//李榮浩----21
}
}
//拋出聲明
public static void main(String[] args) throws CloneNotSupportedException {
Student s1 = new Student();
s1.setName("李榮浩");
s1.setAge(21);
System.out.println(s1.getName()+" -- "+s1.getAge());//李榮浩 -- 21
//複製s1對象
Object obj = s1.clone() ;
//向下轉型
Student s2 = (Student) obj;
System.out.println(s1.getName()+"----"+s2.getAge());//李榮浩----21
}
}
Scanner類:
package org.westos_10_scanner;
import java.util.Scanner;
/* 鍵盤錄入兩個方法:
* 1)Scanner:用來創建一個文本掃描器(鍵盤錄入)
2)java高級特性:IO流(後面講)
BufferReder:字符緩衝流來鍵盤錄入
開發步驟:
* 1)創建鍵盤錄入對象
* 2)錄入數據
* 3)輸出
Scanner類中常用的方法:
*
* nextInt():錄入int類型的數據
* nextLine():錄入一個字符串類型
* 如果想要錄入一個int類型的數,卻輸入了一個字符串,就會報出異常:
* java.util.InputMismatchException:輸入和想到的數據不匹配
* 故加入一個判斷的功能來避免
* * 判斷的功能:
* 細節:可以添加邏輯判斷
* hasNextXXX(); 在錄入數據之前,加上判斷功能,判斷是否由下一個可以錄入的XXX類型的數據
* nextXXX();//通過錄入獲取這個int類型的數據
*
* 舉例:
* public boolean hasNextInt()
* nextInt();
*
* */
public class ScannerDemo1 {
public static void main(String[] args) {
//創建鍵盤錄入對象(導包)
Scanner sc = new Scanner(System.in);
//判斷
if(sc.hasNextInt()) {
int a = sc.nextInt();
System.out.println("a:"+a);
}else{
//錯誤提示
System.out.println("錄入的數據類型和想要的不匹配!");
}
}
}
/* 鍵盤錄入兩個方法:
* 1)Scanner:用來創建一個文本掃描器(鍵盤錄入)
2)java高級特性:IO流(後面講)
BufferReder:字符緩衝流來鍵盤錄入
開發步驟:
* 1)創建鍵盤錄入對象
* 2)錄入數據
* 3)輸出
Scanner類中常用的方法:
*
* nextInt():錄入int類型的數據
* nextLine():錄入一個字符串類型
* 如果想要錄入一個int類型的數,卻輸入了一個字符串,就會報出異常:
* java.util.InputMismatchException:輸入和想到的數據不匹配
* 故加入一個判斷的功能來避免
* * 判斷的功能:
* 細節:可以添加邏輯判斷
* hasNextXXX(); 在錄入數據之前,加上判斷功能,判斷是否由下一個可以錄入的XXX類型的數據
* nextXXX();//通過錄入獲取這個int類型的數據
*
* 舉例:
* public boolean hasNextInt()
* nextInt();
*
* */
public class ScannerDemo1 {
public static void main(String[] args) {
//創建鍵盤錄入對象(導包)
Scanner sc = new Scanner(System.in);
//判斷
if(sc.hasNextInt()) {
int a = sc.nextInt();
System.out.println("a:"+a);
}else{
//錯誤提示
System.out.println("錄入的數據類型和想要的不匹配!");
}
}
}
package org.westos.scanner_01;
import java.util.Scanner;
/**
* Scanner類中的注意事項:
* 先錄入int類型的數據,在錄入String類型數據,第二次錄入的數據沒有接收到,直接輸出結果了,由於"回車"才能接收數據
* 回車換行符導致的!
* 解決方案:
* 在第二次錄入String類型數據之前,需要重新創建鍵盤錄入對象錄入String類型
*
* */
public class ScannerDemo3 {
public static void main(String[] args) {
//鍵盤錄入對象
Scanner sc = new Scanner(System.in) ;
//先錄入兩個int類型的數據
/*int a = sc.nextInt() ;
int b = sc.nextInt() ;
System.out.println("a:"+a+",b:"+b);*/
//錄入兩個String類型的數據
//hasNextLine
String a = sc.nextLine() ;
String b = sc.nextLine() ;
//先錄入String類型的數據,在錄入int類型的數據
String a = sc.nextLine() ;
int b = sc.nextInt() ;
//先錄入int類型,再錄入String類型
int a = sc.nextInt() ;
//String b = sc.nextLine() ;
String b = sc.next() ;
int a = sc.nextInt() ;
//創建鍵盤錄入對象
Scanner sc2 = new Scanner(System.in) ;
String b = sc2.nextLine() ;
System.out.println("a:"+a+",b:"+b);
}
}
/**
* Scanner類中的注意事項:
* 先錄入int類型的數據,在錄入String類型數據,第二次錄入的數據沒有接收到,直接輸出結果了,由於"回車"才能接收數據
* 回車換行符導致的!
* 解決方案:
* 在第二次錄入String類型數據之前,需要重新創建鍵盤錄入對象錄入String類型
*
* */
public class ScannerDemo3 {
public static void main(String[] args) {
//鍵盤錄入對象
Scanner sc = new Scanner(System.in) ;
//先錄入兩個int類型的數據
/*int a = sc.nextInt() ;
int b = sc.nextInt() ;
System.out.println("a:"+a+",b:"+b);*/
//錄入兩個String類型的數據
//hasNextLine
String a = sc.nextLine() ;
String b = sc.nextLine() ;
//先錄入String類型的數據,在錄入int類型的數據
String a = sc.nextLine() ;
int b = sc.nextInt() ;
//先錄入int類型,再錄入String類型
int a = sc.nextInt() ;
//String b = sc.nextLine() ;
String b = sc.next() ;
int a = sc.nextInt() ;
//創建鍵盤錄入對象
Scanner sc2 = new Scanner(System.in) ;
String b = sc2.nextLine() ;
System.out.println("a:"+a+",b:"+b);
}
}
String類
String類:
代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作爲此類的實例實現;字符串一旦被賦值,其值不能再改變
String類常用的構造方法:
String():表示一個空字符序列。
public String(byte[] bytes,Charset ch):默認字符集(編碼格式):GBK,如果是GBK格式,可以不寫第二個參數
public String(byte[] bytes,int index,int length):將部分字節數組構造成一個字符串
public String(char[] value):將字符數組構造成一個字符串
public String(char[] value,int index,int length):將部分的字符數組構造成一個字符串
public String(String original):通過字符串常量構造一個字符串對象
*獲取字符串的長度功能:
public int length()
面試題:
數組中有沒有length(), 字符串中有沒有length(), 集合中有沒有length()(集合後面講)?
數組沒有length(),數組有length屬性
字符串中有length()
集合中沒有length(),獲取集合中元素數量:size()
package org.westos_10_string01;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class StringDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
//創建一個String對象
String s1 = new String();
System.out.println("s1:"+s1); //s1:
System.out.println("s1.length():"+s1.length());//s1.length():0
System.out.println("---------------------");
//public String(byte[] bytes,Charset ch):默認字符集(編碼格式):GBK,如果是GBK格式,可以不寫第二個參數
//創建一個字節數組
byte[] bys = {97, 98, 99, 100, 101} ;
String s2 = new String(bys);
System.out.println("s2:"+s2);//s2:abcde 字節的值要找它對應的ASCII碼錶中的字符
System.out.println("s2.length():"+s2.length());//s2.length():5
System.out.println("----------------------");
/*編碼和解碼:一定要保證編碼格式一致
編碼:
把能看懂的東西轉換成一個看不懂的東西:String----->byte[]:public byte[] getBytes(String charsetName)
解碼:
把當前的byte[]轉成能看懂的東西(String):byte[]----->String :public String(byte[] bytes,CharsetName ch)*/
//編碼
String s3 = "我在回憶裏等你!";
byte[] bys2 = s3.getBytes("GBK");//拋出異常 UnsupportedEncodingException
System.out.println(bys2);//[B@70dea4e
//Arrays:數組工具類:toString(byte[] bys)
System.out.println(Arrays.toString(bys2));
//-50, -46, -44, -38, -69, -40, -46, -28, -64, -17, -75, -56, -60, -29, -93, -95]
//解碼
System.out.println("-------");
String str = new String(bys2, "GBK") ;
System.out.println("str:"+str);//str:我在回憶裏等你!
//public String(char[] value):將字符數組構造成一個字符串
//定義一個字符數組
char[] chs = {'我','在','回','憶','裏','等','你'} ;
String s4 = new String(chs) ;
System.out.println("s4.length():"+s4.length()); //s4.length():7
System.out.println("s4:"+s4); //s4:我在回憶裏等你
System.out.println("--------------------");
String s5 = new String(chs, 1, 6) ;
System.out.println("s5:"+s5);//s5:在回憶裏等你
System.out.println("s5.length():"+s5.length());//s5.length():6
System.out.println("--------------------");
//public String(String original):通過字符串常量構造一個字符串對象
String s6 = new String("hello") ;//一般不使用
System.out.println("s6:"+s6);//s6:hello
System.out.println("s6.length():"+s6.length());//s6.length():5
String s7 = "iloveyou" ;
System.out.println("s7:"+s7);//s7:iloveyou
System.out.println("s7.length():"+s7.length());//s7.length():8
}
}
//創建一個String對象
String s1 = new String();
System.out.println("s1:"+s1); //s1:
System.out.println("s1.length():"+s1.length());//s1.length():0
System.out.println("---------------------");
//public String(byte[] bytes,Charset ch):默認字符集(編碼格式):GBK,如果是GBK格式,可以不寫第二個參數
//創建一個字節數組
byte[] bys = {97, 98, 99, 100, 101} ;
String s2 = new String(bys);
System.out.println("s2:"+s2);//s2:abcde 字節的值要找它對應的ASCII碼錶中的字符
System.out.println("s2.length():"+s2.length());//s2.length():5
System.out.println("----------------------");
/*編碼和解碼:一定要保證編碼格式一致
編碼:
把能看懂的東西轉換成一個看不懂的東西:String----->byte[]:public byte[] getBytes(String charsetName)
解碼:
把當前的byte[]轉成能看懂的東西(String):byte[]----->String :public String(byte[] bytes,CharsetName ch)*/
//編碼
String s3 = "我在回憶裏等你!";
byte[] bys2 = s3.getBytes("GBK");//拋出異常 UnsupportedEncodingException
System.out.println(bys2);//[B@70dea4e
//Arrays:數組工具類:toString(byte[] bys)
System.out.println(Arrays.toString(bys2));
//-50, -46, -44, -38, -69, -40, -46, -28, -64, -17, -75, -56, -60, -29, -93, -95]
//解碼
System.out.println("-------");
String str = new String(bys2, "GBK") ;
System.out.println("str:"+str);//str:我在回憶裏等你!
//public String(char[] value):將字符數組構造成一個字符串
//定義一個字符數組
char[] chs = {'我','在','回','憶','裏','等','你'} ;
String s4 = new String(chs) ;
System.out.println("s4.length():"+s4.length()); //s4.length():7
System.out.println("s4:"+s4); //s4:我在回憶裏等你
System.out.println("--------------------");
String s5 = new String(chs, 1, 6) ;
System.out.println("s5:"+s5);//s5:在回憶裏等你
System.out.println("s5.length():"+s5.length());//s5.length():6
System.out.println("--------------------");
//public String(String original):通過字符串常量構造一個字符串對象
String s6 = new String("hello") ;//一般不使用
System.out.println("s6:"+s6);//s6:hello
System.out.println("s6.length():"+s6.length());//s6.length():5
String s7 = "iloveyou" ;
System.out.println("s7:"+s7);//s7:iloveyou
System.out.println("s7.length():"+s7.length());//s7.length():8
}
}
字符串的一個特點:一旦被賦值,其值不能被改變(不可變的字符序列)
* 面試題:
String s = "hello"
和String s = new String("hello") 兩個有什麼區別?分別創建了幾個對象
第一個創建了一個對象
第二個s創建兩個對象(堆內存中有new String(),然後字符串常量池中也有這樣一個字符串常量(開闢空間的地址))
String類的中常用的判斷功能:
boolean equals(Object obj): 當前該對象是否obj這個對象是否相等;
boolean equalsIgnoreCase(String str): 比較字符串是否相等,忽略大小寫
boolean contains(String str): 判斷str這個字符串是否包含在當前字符串中
boolean startsWith(String str): 是否以str子字符串開頭
boolean endsWith(String str): 判斷是否以str子字符串結尾
boolean isEmpty(): 判斷字符串是否爲空
String s = "" ;空字符
String s = " " ;字符串"空格"
String s = null ;當前字符串對象爲空
public class StringDemo {
public static void main(String[] args) {
//定義一個字符串
String s1 = "helloworld" ;
String s2 = "HelloWorld" ;
//boolean equals(Object obj):當前該對象是否obj這個對象是否相等;String重寫equals(),比較的是兩個字符串的內容是否相同
System.out.println("equals:"+s1.equals(s2));
//boolean equalsIgnoreCase(String str):比較字符串是否相等,忽略大小寫
System.out.println("equalsIgnoreCase:"+s1.equalsIgnoreCase(s2));
//boolean contains(String str):判斷str這個字符串是否包含在當前字符串中
System.out.println("contains:"+s1.contains("owo"));
System.out.println("contains:"+s1.contains("ak47"));
//boolean startsWith(String str):是否以str子字符串開頭
System.out.println("starsWith:"+s1.startsWith("hel"));
//boolean endsWith(String str):判斷是否以str子字符串結尾
//boolean isEmpty():判斷字符串是否爲空
System.out.println("isEmpty:"+s1.isEmpty());
}
}
//定義一個字符串
String s1 = "helloworld" ;
String s2 = "HelloWorld" ;
//boolean equals(Object obj):當前該對象是否obj這個對象是否相等;String重寫equals(),比較的是兩個字符串的內容是否相同
System.out.println("equals:"+s1.equals(s2));
//boolean equalsIgnoreCase(String str):比較字符串是否相等,忽略大小寫
System.out.println("equalsIgnoreCase:"+s1.equalsIgnoreCase(s2));
//boolean contains(String str):判斷str這個字符串是否包含在當前字符串中
System.out.println("contains:"+s1.contains("owo"));
System.out.println("contains:"+s1.contains("ak47"));
//boolean startsWith(String str):是否以str子字符串開頭
System.out.println("starsWith:"+s1.startsWith("hel"));
//boolean endsWith(String str):判斷是否以str子字符串結尾
//boolean isEmpty():判斷字符串是否爲空
System.out.println("isEmpty:"+s1.isEmpty());
}
}
String類的獲取功能(重點):
int length() :獲取字符串長度功能
char charAt(int index):返回的是索引處對應的字符
int indexOf(int ch):返回指定字符在此字符串中第一次出現處的索引
int indexOf(String str):返回指定子字符串在此字符串中第一次出現 的索引
int indexOf(int ch,int fromIndex):返回在此字符串中第一次出現指定字符處的索引,從指定的索引開始搜索。
int indexOf(String str,int fromIndex):返回在此字符串中第一次出現指定字符串處的索引,從指定的索引開始搜索
String substring(int start):從指定位置開始截取字符串,默認截取到末尾
String substring(int start,int end):從指定位置開始截取到指定位置結束,包前(start索引)不包後(end索引)
public class StringDemo {
public static void main(String[] args) {
//定義一個字符串:
String str = "helloworld" ;
//int length() :獲取字符串長度功能
System.out.println("length:"+str.length());
//char charAt(int index):返回的是索引處對應的字符
System.out.println("charAt:"+str.charAt(1));
System.out.println("charAt:"+str.charAt(8));
System.out.println("-------------------------------");
//int indexOf(int ch):返回指定字符在此字符串中第一次出現處的索引
System.out.println("indexof:"+str.indexOf('l'));
System.out.println("indexof:"+str.indexOf('k'));//-1
//int indexOf(String str):返回指定子字符串在此字符串中第一次出現的索引
System.out.println("indexOf:"+str.indexOf("owo"));
System.out.println("-------------------------------");
//int indexOf(int ch,int fromIndex):返回在此字符串中第一次出現指定字符處的索引,從指定的索引開始搜索。
System.out.println("indexOf:"+str.indexOf('l', 4));
//int indexOf(String str,int fromIndex):返回在此字符串中第一次出現指定字符串處的索引,從指定的索引開始搜索
//String substring(int start):從指定位置開始截取字符串,默認截取到末尾(返回一個新的字符串,不再是字符串本身!)
System.out.println("substring:"+str.substring(5));
//String substring(int start,int end):從指定位置開始截取到指定位置結束,包前(start索引)不包後(end索引)
System.out.println("substring:"+str.substring(4, 8));//owor
}
}
//定義一個字符串:
String str = "helloworld" ;
//int length() :獲取字符串長度功能
System.out.println("length:"+str.length());
//char charAt(int index):返回的是索引處對應的字符
System.out.println("charAt:"+str.charAt(1));
System.out.println("charAt:"+str.charAt(8));
System.out.println("-------------------------------");
//int indexOf(int ch):返回指定字符在此字符串中第一次出現處的索引
System.out.println("indexof:"+str.indexOf('l'));
System.out.println("indexof:"+str.indexOf('k'));//-1
//int indexOf(String str):返回指定子字符串在此字符串中第一次出現的索引
System.out.println("indexOf:"+str.indexOf("owo"));
System.out.println("-------------------------------");
//int indexOf(int ch,int fromIndex):返回在此字符串中第一次出現指定字符處的索引,從指定的索引開始搜索。
System.out.println("indexOf:"+str.indexOf('l', 4));
//int indexOf(String str,int fromIndex):返回在此字符串中第一次出現指定字符串處的索引,從指定的索引開始搜索
//String substring(int start):從指定位置開始截取字符串,默認截取到末尾(返回一個新的字符串,不再是字符串本身!)
System.out.println("substring:"+str.substring(5));
//String substring(int start,int end):從指定位置開始截取到指定位置結束,包前(start索引)不包後(end索引)
System.out.println("substring:"+str.substring(4, 8));//owor
}
}
String類的轉換功能(重點):
byte[] getBytes(): 將字符串轉換字節數組
char[] toCharArray(): 將字符串轉換成 字符數組 (開發中經常使用)
static String valueOf(char[] chs): 將字符數組轉換成字符串
static String valueOf(int i): 將一個int類型的數據轉換成字符串
注意:
String類中的valueOf()可以將任何數據類型轉換成字符串
String toLowerCase(): 將字符串全部轉成小寫
String toUpperCase(): 將字符串全部轉換成大寫
String concat(String str): 字符串拼接方法
public class StringDemo {
//構造方法:
//構造方法不能使用遞歸
/*public StringDemo(){
StringDemo();
}*/
public static void main(String[] args) {
//定義一個字符串
String s = "JavaSE" ;
//byte[] getBytes():將字符串轉換字節數組
byte[] bys = s.getBytes() ;
//遍歷字節數組
for(int x = 0 ; x < bys.length ; x++){
System.out.println(bys[x]);
}
System.out.println("---------------------");
//char[] toCharArray():將字符串轉換成 字符數組
char[] chs = s.toCharArray() ;
for (int x = 0; x < chs.length; x++) {
System.out.println(chs[x]);
}
System.out.println("---------------------");
//static String valueOf(char[] chs):將字符數組轉換成字符串
String s2 = String.valueOf(chs) ;
System.out.println("s2:"+s2);
//static String valueOf(int i):將一個int類型的數據轉換成字符串
String s3 = String.valueOf(100) ;
System.out.println("s3:"+s3);
//String toLowerCase():將字符串全部轉成小寫
System.out.println("toLowerCase:"+s.toLowerCase());
//String toUpperCase():將字符串全部轉換成大寫
System.out.println("toUpperCase:"+s.toUpperCase());
//String concat(String str):字符串拼接方法
String s4 = "hello" ;
String s5 = "world" ;
System.out.println("contact:"+s4.concat(s5));
String s6 = "java" ;
s6 += "web" ;
System.out.println("s6:"+s6);
/**
*方法嵌套
* Math.max(Math.max(a,b),c);
*
*方法遞歸:方法調用本身的一種現象
*
* 三個條件:
* 1)需要定義個方法
* 2)方法必須有出口條件
* 3)必須有某一種規律
* public void show(int n){
*
* if(n<0){
* System.exit(0) ; //讓jvm退出,程序結束
* }
*
* System.out.println(n) ;
* show(--n) ;
* }
* */
System.out.println("--------------------");
//需求:求5的階乘
//5! = 5 * 4 * 3 * 2 * 1 ;
//5! = 5 * 4! ;
int jc = 1 ;
//循環思想
for(int x = 2 ; x <=5 ; x ++){
jc *= x;
}
System.out.println("5的階乘是:"+jc);
System.out.println("-------------------------");
//使用遞歸的思想:
//需要定義個方法
System.out.println("5的階乘是:"+jieCheng(5));
}
/**
* 明確返回值類型:
* int類型
* 參數類型:int類型的值
*
* 2)出口條件:
* if(n==1){
* return 1 ;
* }
*
* 3)要有規律
* if(n!=1){
* return n* 方法名(n-1);
* }
* */
public static int jieCheng(int n){
if(n==1){
return 1 ;
}else{
return n* jieCheng(n-1) ; //5 * 4 * 3 * 1 *1
}
}
}
//構造方法:
//構造方法不能使用遞歸
/*public StringDemo(){
StringDemo();
}*/
public static void main(String[] args) {
//定義一個字符串
String s = "JavaSE" ;
//byte[] getBytes():將字符串轉換字節數組
byte[] bys = s.getBytes() ;
//遍歷字節數組
for(int x = 0 ; x < bys.length ; x++){
System.out.println(bys[x]);
}
System.out.println("---------------------");
//char[] toCharArray():將字符串轉換成 字符數組
char[] chs = s.toCharArray() ;
for (int x = 0; x < chs.length; x++) {
System.out.println(chs[x]);
}
System.out.println("---------------------");
//static String valueOf(char[] chs):將字符數組轉換成字符串
String s2 = String.valueOf(chs) ;
System.out.println("s2:"+s2);
//static String valueOf(int i):將一個int類型的數據轉換成字符串
String s3 = String.valueOf(100) ;
System.out.println("s3:"+s3);
//String toLowerCase():將字符串全部轉成小寫
System.out.println("toLowerCase:"+s.toLowerCase());
//String toUpperCase():將字符串全部轉換成大寫
System.out.println("toUpperCase:"+s.toUpperCase());
//String concat(String str):字符串拼接方法
String s4 = "hello" ;
String s5 = "world" ;
System.out.println("contact:"+s4.concat(s5));
String s6 = "java" ;
s6 += "web" ;
System.out.println("s6:"+s6);
/**
*方法嵌套
* Math.max(Math.max(a,b),c);
*
*方法遞歸:方法調用本身的一種現象
*
* 三個條件:
* 1)需要定義個方法
* 2)方法必須有出口條件
* 3)必須有某一種規律
* public void show(int n){
*
* if(n<0){
* System.exit(0) ; //讓jvm退出,程序結束
* }
*
* System.out.println(n) ;
* show(--n) ;
* }
* */
System.out.println("--------------------");
//需求:求5的階乘
//5! = 5 * 4 * 3 * 2 * 1 ;
//5! = 5 * 4! ;
int jc = 1 ;
//循環思想
for(int x = 2 ; x <=5 ; x ++){
jc *= x;
}
System.out.println("5的階乘是:"+jc);
System.out.println("-------------------------");
//使用遞歸的思想:
//需要定義個方法
System.out.println("5的階乘是:"+jieCheng(5));
}
/**
* 明確返回值類型:
* int類型
* 參數類型:int類型的值
*
* 2)出口條件:
* if(n==1){
* return 1 ;
* }
*
* 3)要有規律
* if(n!=1){
* return n* 方法名(n-1);
* }
* */
public static int jieCheng(int n){
if(n==1){
return 1 ;
}else{
return n* jieCheng(n-1) ; //5 * 4 * 3 * 1 *1
}
}
}