Java包裝類、序列化、String類常用方法

Java一些問題總結

##1. 包裝類的享元模式
顧名思義:共享元對象。如果在一個系統中存在多個相同的對象,那麼只需要共享一份對象的拷貝,而不必爲每一次使用創建新的對象。

測試:
	String num="abs";
	String num1="acd";
	String num2=new String(" 67 89 we asffds ert ");
	//打印  logger  debug
	System.out.println(Integer.toHexString(num.hashCode()));
	System.out.println(Integer.toHexString(num1.indexOf('a')));
	System.out.println(Integer.toHexString(num2.charAt(3)));
	結果:
		17872
		0
		20

享元模式是爲數不多的、只爲提升系統性能而生的設計模式。它的主要作用就是複用對象,以節省內存空間和對象創建時間。

##2. 什麼是Java對象序列化
Java平臺允許我們在內存中創建可複用的Java對象,但一般情況下,只有當JVM處於運行時,這些對象纔可能存在,即,這些對象的生命週期不會比JVM的生命週期更長。但在現實應用中,就可能要求在JVM停止運行之後能夠保存(持久化)指定的對象,並在將來重新讀取被保存的對象。Java對象序列化就能夠幫助我們實現該功能。

使用Java對象序列化,在保存對象時,會把其狀態保存爲一組字節,在未來,再將這些字節組裝成對象。必須注意地是,對象序列化保存的是對象的"狀態",即它的成員變量。由此可知,對象序列化不會關注類中的靜態變量。

除了在持久化對象時會用到對象序列化之外,當使用RMI(遠程方法調用),或在網絡中傳遞對象時,都會用到對象序列化。Java序列化API爲處理對象序列化提供了一個標準機制,該API簡單易用。

##3. String類的常用方法
###⑴ length()字符串的長度

	String num="6789";
	System.out.println(num.length());
	輸出結果爲:4

###⑵ charAt()截取一個字符

	String num1="abcd";
	System.put.println(num1.charAt(2)); //括號中爲索引號
	結果爲:c 

###⑶ toCharArray()轉換爲字符數組

	String num1="afsg";
	System.out.println(num1.toCharArray());
	結果爲:afsg

###⑷ equals()和equalsIgnoreCase()比較兩個字符串

	String a="Hello";
	String b="Hello";
	String c="World";
	String d="HELLO";
	System.out.println(a.equals(b));
	System.out.println(a.equals(d));
	System.out.println(a.equals(c)); //比較字符串及其長度,並且區分大小寫
	
	//比較字符串及其長度,並且不區分大小寫
	System.out.println(a.equalsIgnoreCase(d));
	結果爲:true false false true

###⑸ startsWith()方法決定是否以特定字符串開始

	System.out.println(a.startsWith("He"));或者System.out.println(a.startsWith(b));
	結果是:true

###⑹ endWith()方法決定是否以特定字符串結束

	System.out.println(a.endsWith("d"));
	結果是:false

###⑺ compareTo()和compareToIgnoreCase() 比較字符串

	String s1 = "adger";  
	String s2 = "adgerfa";  
	String s3 = "ADGER";  
	String s4 = "adher";  
	System.out.println(s1.compareTo(s2));//-2  
	System.out.println(s1.compareTo(s3));//32  
	System.out.println(s1.compareToIgnoreCase(s3));//0  
	System.out.println(s3.compareToIgnoreCase(s4));//-1 

compareTo()的返回值是int,它是先比較對應字符的大小(ASCII碼順序)
1、如果字符串相等返回值0

2、如果第一個字符和參數的第一個字符不等,結束比較,返回他們之間的差值(ascii碼值)(負值代表:前字符串的值小於後字符串,正值代表:前字符串大於後字符串)

3、如果第一個字符和參數的第一個字符相等,則以第二個字符和參數的第二個字符做比較,以此類推,直至比較的字符或被比較的字符有一方全比較完,這時就比較字符的長度.
compareToIgnoreCase()方法是不區分大小寫,返回值是int,比較方式與compareTo()相同

	package lulu1;
	import java.util.Arrays;
	import java.util.Scanner;

	/**
	 * 比較輸入字符串的大小:不分大小寫,按照字符串的大小排序 
	 * @author chenglulu
	 *
	 */
	public class Compare {
		public static void main(String[] args) {
		Scanner  sc=new Scanner(System.in);
		System.out.println("請輸入要比較的字符串:");
		String input=sc.nextLine();
		String[] s = input.trim().split(" "); //trim()是把開頭和結尾的空格去掉
		for(int i=0;i<s.length-1;i++){
			for(int j=0;j<s.length-1-i;j++){
				if(s[j].compareToIgnoreCase(s[j+1])>0){
					String temp = s[j];
					s[j]=s[j+1];
					s[j+1]=temp;
				}
				
			}
		}
		System.out.println(Arrays.toString(s));
	}
	}

  
	//測試  
	//輸入:   fas rew ada ADE FAA re bci def BCr aC Bc    
	//輸出:aC ada ADE Bc bci BCr def FAA fas re rew  

###⑻ indexOf() 查找字符或者子串第一次出現的地方。

	package lulu1;

	import java.util.Scanner;
	/**
	 * 查找字符或字符串第一次出現的地方
	 * @author chenglu
	 *
	 */
		public class Date {
		public static void main(String args[]){
			Scanner sc=new Scanner(System.in);
			System.out.println("請輸入一個字符串:"); 
			String input =sc.nextLine();
			System.out.println(input.indexOf("sed"));  //不存在的話,返回-1
			System.out.println(input.indexOf('a'));  //存在的話,返回相應的索引值
		}
	}

###⑼ lastIndexOf() 查找字符或者子串是後一次出現的地方。

import java.util.Scanner;
/**
 * 查找字符或字符串最後一次出現的地方
 * @author chenglu
 *
 */
public class Date {
	public static void main(String args[]){
		Scanner sc=new Scanner(System.in);
		System.out.println("請輸入一個字符串:"); 
		String input =sc.nextLine();
		System.out.println(input.lastIndexOf('s'));  //不存在的話,返回-1
		System.out.println(input.indexOf('a'));  //存在的話,返回相應的索引值
	}
}

###⑽ substring()截取字符串

System.out.println(input.substring(2, 6));  //返回索引爲2到5的值
結果爲:請輸入一個字符串:qwerasdf
	   eras

###⑾ replace() 替換

	String a="wertqwertq";
	System.out.println(a.replace("tq", "asdf"));//全部替換
	System.out.println(a.replaceFirst("w", "mnbv")); //只替換第一個w
	System.out.println(a.replaceAll("w", "123456"));//全部替換
		

結果爲:
這裏寫圖片描述
###⑿ concat() 連接兩個字符串

	String s="123456";
	String s1="78987";
	System.out.println(s.concat(s1));
		結果爲:12345678987

###⒀ trim() 去掉起始和結尾的空格

	String d=" as df gh we  qw sd df as ";
	System.out.println(d.trim());//把開始和結尾的空格去掉
	結果爲:as df gh we  qw sd df as

###⒁ toLowerCase()/ toUpperCase() 大小寫

	String  b="asdfghjk";
	String c="ASDFGHJ";
	System.out.println(b.toUpperCase());
	System.out.println(c.toLowerCase());
	System.out.println(s.toLowerCase());
		結果爲:
			ASDFGHJK
			asdfghj
			123456	

###⒂ split(String str)//將str作爲分隔符進行字符串分解

		String d="as df gh we  qw sd df as ";
		String[] ss = d.split(" ");
		
		System.out.println(d.split(" ")); //輸出地址
		System.out.println(ss); //輸出地址
		System.out.println(Arrays.toString(ss)); //輸出數組
		結果爲: [Ljava.lang.String;@39e5b5
				[Ljava.lang.String;@117f31e
				[as, df, gh, we, , qw, sd, df, as]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章