Java常用類(String&Object&Scanner)

 

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: [email protected]
		//toString方法重寫後打印            p1: Persen [name=彭于晏 , age=22]
		
		System.out.println("toString: "+p1.toString());

		System.out.println(p1.getClass().getName()+"@"+Integer.toHexString(p1.hashCode()));
		//toString: [email protected]   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()));
		/* [email protected]
		   直接對象名稱,想要顯示成員變量的值,怎麼辦?
		   重寫toString()方法 */

	}
}//p1: [email protected]
		//toString方法重寫後打印            p1: Persen [name=彭于晏 , age=22]
		
		System.out.println("toString: "+p1.toString());

		System.out.println(p1.getClass().getName()+"@"+Integer.toHexString(p1.hashCode()));
		//toString: [email protected]   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()));
		/* [email protected]
		   直接對象名稱,想要顯示成員變量的值,怎麼辦?
		   重寫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);//[[email protected]
		//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);//[[email protected]
		//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 
		}
	}
}

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章