天天看點

90%的人都不知道Scanner String 方法這樣用day13

day13

90%的人都不知道Scanner String 方法這樣用day13

方法重寫

對于一個方法而言: 區分方法 通過方法名找方法 通過參數清單來确定方法
  • 方法重寫:

    ​ 發生繼承關系、實作關系 父類不滿足子類的需求 子類重寫父類中的方法

什麼情況下會發生:

1:發生繼承

​ 2:方法名同名

​ 3:參數清單要一模一樣 (順序 個數 類型)

​ 4:子類的傳回值類型<=父類的傳回值類型(引用) 基本類型一模一樣

​ 5:子類的修飾符>=父類的修飾符 (父類中的修飾符不能是private)

​ 6:子類抛出的異常<=父類抛出的異常 (了解:可以認為任意一個方法都會對外抛出運作時異常)

​ 參一反小修大異小

main()

  1. public:保證能夠調用到
  2. static:保證外界調用無需建立對象
  3. void: jvm無需傳回值
  4. String[] args: 可以傳入 調用main方法時 可以傳入實際參數

常用類

Scanner

學習使用Scanner
  1. hasNextXXX 擷取掃描到的資料是否是XXX類型
  2. nextXXX 擷取下一個掃描到的内容轉為XXX類型(轉換過程中有可能存在問題)

重新建立Scanner對象 指定檔案作為輸入源

Scanner sc = new Scanner(new File(“C:\Users\wawjy\Desktop\a.txt”));

String

String:

字元串: 一組字元序列 (不可變的串)

建立String對象:

  1. new String();
  2. new String(“abc”);
  3. "love";
  4. new String(buf,2,2);//通過位元組數組建立

常見方法

public class Test02 {
	public static void main(String[] args) {
		
		// 建立一個String對象
		String str = "ilovejavaandlaoxue";
		
		//charAt(int index);
		char ch = str.charAt(3);
		System.out.println("傳回目前索引位置上的指定字元:"+ch);
		
		//codePointAt(index)
		int num = str.codePointAt(0);
		System.out.println("傳回指定索引位置上元素的代碼點:"+num);
		
		//compareTo(String)
		String cStr = "ilovejavaandlaoxu";
		num = str.compareTo(cStr);
		System.out.println("比較兩個字元串的大小:"+num);
		
		//compareToIgronCase(String)
		cStr = "ILOVEJAVAANDLAOXUE";
		num = str.compareToIgnoreCase(cStr);
		System.out.println("比較兩個字元串的大小(忽略大小寫):"+num);
		
		//concat(String)
		cStr = "andgirl";
		str = str.concat(cStr);		
		System.out.println("拼接之後的結果是:"+str);
		
		//copyValueOf(char[])
		char[] chs = new char[] {'i','l','o','v','e'};
		str = String.copyValueOf(chs);
		System.out.println("建立新的字元串:"+str);
		
		str = String.copyValueOf(chs,1,4);
		System.out.println("建立新的字元串:"+str);
		
		str = "憨憨.avi";
		boolean flag = str.endsWith(".avi");
		System.out.println("str是否是.avi格式:"+flag);
		
		//getBytes
		byte[] buf = str.getBytes();
		System.out.println("擷取字元串的位元組數組:"+Arrays.toString(buf));
		
		//getChars();
		chs = new char[10];
		//  從str的2索引處開始  到str的第5個索引結束(不包含)  複制到chs字元數組中 從第1個位置開始
		str.getChars(2,6, chs, 1);
		System.out.println("擷取字元串的字元數組:"+Arrays.toString(chs));
		
		//indexOf  傳回負數代表未找到
		str = "hehe.avi.png";
		int index = str.indexOf(".");
		System.out.println(".在string中第一次出現的位置是:"+index);
		
		index = str.indexOf(100);
		System.out.println("e在string中第一次出現的位置是:"+index);
		
		index = str.indexOf(".",5);
		System.out.println(".在string中第5個索引位置開始計算,第一次出現的位置是:"+index);
		
		index = str.lastIndexOf(".");
		System.out.println(".在string中最後一次出現的位置是:"+index);
		
		
		//isEmpty()
		System.out.println("檢視數組是否為null:"+str.isEmpty());
		
		//repleace
		str = "hehe.avi.png";
		str = str.replace(".", "+");
		System.out.println("替換之後的結果:"+str);
		
		//splite:
		str = "login?unme=zs&pwd=zs";
		
		String[] strs = str.split("\\?");
		for(String string:strs) {
			System.out.println(string);
		}
		System.out.println("======");
		String parms = strs[1];
		strs = parms.split("&");
		for(String string:strs) {
			String[] ss = string.split("=");
			System.out.println(ss[1]);
		}
			
		//subString
		str = "login?unme=zs&pwd=zs";
		str = str.substring(4);// 從4索引開始截取到結束
		System.out.println("截取字元串:"+str);
		
		str = str.substring(2, 7);//從2索引開始截取 到索引為7結束不包含7
		System.out.println("截取字元串:"+str);		
		
		//大小寫轉換
		str = "login?unme=zs&pwd=zs";
		str = str.toUpperCase();
		System.out.println("轉為大寫:"+str);
		
		str = str.toLowerCase();
		System.out.println("轉為小寫:"+str);
			
		//通過靜态方法建立String對象
		String str1 = String.valueOf(123);
		System.out.println(str1);
		
		//對象轉字元串 其實就是調用目前對象的toString方法
		User u = new User(10);
		String str2 = String.valueOf(u);
		System.out.println(str2);	
	}
}

class User{
	private int age;
	public User() {
		// TODO Auto-generated constructor stub
	}
	public User(int age) {
		super();
		this.age = age;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [age=" + age + "]";
	}		
}
           

StringBuffer

之是以能夠可變的原因,底層就是一個字元數組,動态數組。
public class Test04 {
	public static void main(String[] args) {
		// 建立StringBuffer
		StringBuffer sb = new StringBuffer();
		// 容量16
		System.out.println("通過空構造器建立的StringBuffer的容量:"+sb.capacity());
		
		//添加元素
		sb.append(true);
		sb.append(false).append("123").append("134");// 鍊式程式設計
		
		System.out.println(sb);
		System.out.println("目前sb對象中的字元串長度:"+sb.length());
		
		//添加元素
		sb.insert(1, "heihei");
		System.out.println(sb);
		
	}
}
           

StringBuilder

StringBuilder和StringBuffer 都繼承了AbstractStringBuilder
  
   StringBuffer效率低于StringBuilder
   StringBuffer安全性要高于StringBuilder
   一般情況下使用StringBuilder
   
   jdk9之後  String中存儲資料通過byte數組存儲 + 變量
  jdk中對于String存儲時的内容消耗極大降低
           

包裝類

8大基本資料類型 -> 8個包裝類

byte->Byte short->Short long ->Long float->Float double->Double boolean->Boolean

char ->Character int ->Integer

jdk12 Integer中的所有構造器都過時 通過valueOf方法擷取int對應的Integer對象

  • String->int Integer.parseInt();// 可能報異常
  • int ->String String.valueOf()

jdk1.5之後支援自動拆裝箱,本質上就是調用了

裝箱:Integer.valueOf()

拆箱:對象.intValue()

  • 9**

    反之會重新建立一個新的Integer對象

public class Test02 {
	public static void main(String[] args) {
		
		Integer in1 = 123;//jdk1.5之後支援自動裝箱  Integer.valueOf(123);
		int num = in1;//jdk1.5之後支援自動拆箱 in1.intValue();
		
		Integer in2 = 88;
		Integer in3 = 88;
		System.out.println(in2==in3);
		
		in2 = 127;
		in3 = 127;
		System.out.println(in2==in3);		
	}
}
           

tips:

字面值建立Boolean對象時 隻能指定true和false 并且建立的對象也是對應的true和false

字元串建立Boolean對象是 隻要字元是true/false 無所謂大小寫 得到對應的Boolean對象就是與之對應的true和false

其它所有字元串指派都是false

時間Date

空構造器對象建立出的是目前系統時間對象
public class Test01 {
	public static void main(String[] args) {
		//建立Date對象
		Date d = new Date();
		System.out.println(d);
		
		//通過帶參構造器建立對象
		Date date = new Date(1563960432618L);
		System.out.println(date);
		
		
		System.out.println(d.after(date));
		System.out.println(d.before(date));
		
		//擷取毫秒數
		long dateTime = System.currentTimeMillis();
		System.out.println(dateTime);		
	}
}
           

格式化輸出時間:

public class Test02 {
	
	public static void main(String[] args) {
		
		//建立時間對象
		Date date = new Date();
		
		//創SimpleDateFormat對象
		SimpleDateFormat sd = new SimpleDateFormat();
		
		//設定一下輸出的内容格式
		sd.applyPattern("yyyy年MM月dd日 HH時mm分ss秒 是一年中的第D天  W w");
		
		//調用格式化方法格式化日期
		String str = sd.format(date);
		System.out.println(str);
		
		//建立對象并且指定格式化的内容
		SimpleDateFormat ss = new SimpleDateFormat("yy/MM/dd hh:mm:ss");
		System.out.println(ss.format(date));
	}
	
}