Java基礎第十三天學習日記_String字符串

------- android培訓java培訓、期待與您交流! ----------

String類:字符串是一個特殊的對象。

字符串對象最大特點:字符串一旦初始化就不可以被改變。

String s1= "abc";// s1是一個類類型變量,“abc”是一個對象。在其內存中有一個對象。

String s2= new String ("abc");//在其內存中有兩個對象。

String s3= "abc";

s1.equals(s2);結果爲true。因爲String類複寫打了Object類中equals方法,該方法用於判斷字符串是否相同。

s1==s3;結果爲true。因爲當定義字符串常量時,虛擬機會查看常量池,發現其中有相同的字符串對象時,便不會再開闢空間了。

String類提供的對字符串的操作方法有:

1、獲取

1.1 字符串中的包含字符數,也就是字符串的長度。

int length():獲取長度。

1.2根據位置獲取位置上某個字符。

char charAt(int  index);

1.3 根據字符獲取該字符在字符串中位置。(如果沒有找到字符或字符串,返回-1)

int indexof(char ch):返回的是ch在字符串中第一次出現的位置。

int indexof (char ch , int fromIndex) : 從fromIndex指定位置開始,獲取ch在字符穿中出現的位置。

int indexof(string str):返回的是str在字符串中第一次出現的位置。

int indexof (string str , int fromIndex) : 從fromIndex指定位置開始,獲取str在字符穿中出現的位置。

int lastIndexOf("a"):這時,字符串會從最後一個字符向前查找,但是索引不變,一樣是從前面開始計算。

2、判斷。

2.1 字符串中是否包含某一個子串。

boolean contains(str) : 特殊之處,indexOf(str):可以索引str第一次出現位置,如果返回-1,表示該str不在字符串中存在,if( str.indexof("aa")!=-1),而且該方法既可以判斷,又可以獲取出現的位置。

2.2 字符中是否有內容。

boolean isEmpty ():原理就是判斷長度是否爲0.

2.3 字符串是否是以指定內容開頭。

boolean startsWith ( str ) ;

2.4 字符串是否是以指定內容結尾。

Boolean endsWith ( str );

2.5 判斷字符串內容是否相同。複寫了Object類中的equals方法。

boolean equals ( str );

2.6 判斷內容是否相同,並忽略大小寫。

boolean equalsIgnoreCase ( );

3、轉換

3.1 將字符數組轉成字符串。

構造函數:String (char[]);

  String ( char [] , offset , count ) : 將字符數組中的一部分轉成字符串。offset起始位置,count個數。

靜態方法:static String copyValueOf ( char [] );

  static String copyValueOf ( char [] data , int offset , int count )

  static String valueOf ( char [] );

3.2 將字符串轉成字符數組。

char [] toCharArray( );

3.3 將字節數組轉成字符串。

String ( byte[ ] )

String ( byte[ ] , offset , count ) :將字節數組中的一部分轉成字符串。

3.4 將字符串轉成字節數組。

byte[] getBytes ( );

3.5 將基本數據類型轉成字符串。

static String valueOf (int)

static String valueOf (double)

特殊: 字符串和字節數組在轉換過程中,是可以指定編碼表的。

4、替換

String replace ( oldchar , newchar )//可以替換字符串。如果要替換的字符或字符串不存在,返回原串。

5、切割。

String[] split ( regex );//傳入的參數是切割的分隔字符或字符串。返回值是字符串數組。

6、子串。獲取字符串的一部分。

String substring ( begin );//從指定位置開始到結尾。

String substring ( begin ,end );//包含頭不包含尾。

7、轉換,去除空格,比較

7.1 將字符串轉成大寫或小寫。

String toUpperCase ( );

String toLowerCase ( );

7.2 將字符串兩端的多個空格去除。

String trim ( );

7.3 對兩個字符串進行自然順序的比較。

int compareTo ( string );

public class StringTest1 
{
	/**
	 * 自定義方法實現去除字符串兩端空格。
	 */
	public static void main(String[] args)
	{
		String str="   abcdefg  ";
		String str1=myTrim(str);
		System.out.println(str1);
		String str2=str.trim();
		System.out.println(str2);
	}
	public static String myTrim(String str)
	{
		int start=0,end=str.length()-1;
		while(start<=end&&str.charAt(start)==' ')
			start++;
		while(start<=end&&str.charAt(end)==' ')
			end--;
		return str.substring(start,end+1);//返回的子串是包含頭不包含尾的。
	}
}
public class StringTest2 {

	/**
	 * 將字符串反轉,
	 * 思路:
	 * (1)先將字符串轉換爲字符數組
	 * (2)再將字符數組反轉
	 * (3)將字符數組變成字符串
	 */
	public static void main(String[] args)
	{
		String str="abcdefg";
		String str1=reverseString(str);
		System.out.println(str1);
	}
	public static String reverseString(String str)
	{
		char[] arr=str.toCharArray();
		reverse(arr);
		return new String(arr);
	}
	public static void reverse(char[] arr)
	{
		for(int start=0,end=arr.length-1;start<end;start++,end--)
		{
			swap(arr,start,end);
		}
	}
	public static void swap(char[] arr,int start,int end)
	{
		char temp=arr[start];
		arr[start]=arr[end];
		arr[end]=temp;
	}
}
public class StringTest3 
{
	/**
	 * 獲取一個字符串在另一個字符串中出現的次數
	 * 思路:
	 * (1)定義一個計數器
	 * (2)獲取子串在父串中出現的位置
	 * (3)從第一次出現的位置後剩餘的字符串中繼續獲取子串第一次出現的位置,每獲取一次就計數一次。
	 * (4)當獲取不到時,計數完成。
	 */
	public static void main(String[] args) 
	{
		String str="abcdkkefgkk";
		String sub="kk";
		int count=getSubCount2(str, sub);
		System.out.println(count);
	}
	public static int getSubCount(String str,String sub)
	{
		int count=0;
		int index=0;
		while((index=str.indexOf(sub))!=-1)//注意加括號。
		{
			str=str.substring(index+sub.length());
			count++;
		}
		return count;
	} 
	public static int getSubCount2(String str,String sub)
	{
		int count=0;
		int index=0;
		while((index=str.indexOf(sub,index))!=-1)//注意加括號。
		{
			index=index+sub.length();
			count++;
		}
		return count;
	}
}
public class StringTest4 {
	/**
	 * 獲取兩個字符串中的最大相同字符串
	 * 思路:
	 * (1)將短的那個子串按長度遞減的方式獲取到。
	 * (2)將獲取到的子串去長串中判斷是否包含。如果包含,則找到,
	 */
	public static void main(String[] args) 
	{
		String str1="abcdhelloefg";
		String str2="kkkhellobbb";
		String temp=getMaxString(str1, str2);
		System.out.println(temp);
	}
	public static String getMaxString(String str1,String str2)
	{
		String max="",min="";
		max=(str1.length()>str2.length())?str1:str2;
		min=(max==str1)?str2:str1;
		for(int x=0;x<min.length();x++)
		{
			for(int y=0,z=min.length()-x;z<min.length();y++,z++)
			{
				String temp=min.substring(y,z);
				if(max.contains(temp))
					return temp;
			}
		}
		return "";
	}
}

----------------------------------------------------------------------------------

StringBuffer:字符串緩衝區。

  l 字符串的組成原理就是通過該類實現的。

  l StringBuffer可以對字符串內存進行增刪。

  l StringBuffer是一個容器。

  l 很多方法與String相同。

  l StringBuffer是可變長度的。

  l 可以操作多個數據類型。

  l 最終會通過toString方法變成字符串。

基本操作:

1、存儲

StringBuffer append ( ) :將指定數據作爲參數添加到已有數據結尾處。

StringBuffer insert ( index ,數據 ):可以將數據插入到指定index位置。

2、刪除

StringBuffer delete ( start , end ):刪除緩衝區中的數據,包括start,不包含end。

StringBuffer deleteCharAt ( index ):刪除指定位置的字符。

3、獲取。

char charAt ( int index )

int indexOf (String str)

int lastIndexOf ( String str)

int length ( )

String substring ( int start , int end )

4、修改。

StringBuffer replace ( start ,end ,string );

void setCharAt ( int index , char ch );

5、反轉。

StringBuffer reverse ( ) ;

6、將緩衝去中指定數據存儲到指定字符數組中。

void getChars ( int srcBegin , int srcEnd , char [] dst , int dstBegin)

將緩衝去中的從begin到end,不包括end 的數據轉存到dst字符數組中,從索引dst Begin開始。

public class StringBufferDemo {

	/**
	 * StringBuffer方法演示
	 */
	public static void main(String[] args) 
	{
		StringBuffer sb=new StringBuffer();
		sb.append("abc").append(true).append(34);//可以不斷的更新數據,最後使用的時候將其變成字符串就可以了。
		//sb.delete(1, 4);刪除1,到4的字符。包含頭不包含尾。
		//sb.deleteCharAt(1);//刪除指定位置的字符
		//sb.delete(0, sb.length());//清空緩衝區。
		//sb.replace(1, 4, "t");//將指定範圍內的字符串替換爲指定字符串。
		//sb.setCharAt(1, 'c');//將指定索引上的字符替換爲指定字符。只能爲字符。
		//sb.reverse();//將字符串反轉。
		char[] ch=new char[4];
		sb.getChars(1, 6, ch, 0);
		for(int x=0;x<ch.length;x++)
		{
			System.out.println(ch[x]);
		}
		//sb.toString();
		//System.out.println(sb);
	}
}

JDK1.5版本之後出現了StringBuilder。

StringBuilder的方法與的方法幾乎完全相同。

StringBuilder是線程不同步。所以它更加效率,但是當有多線程時應該使用buffer。

StringBuffer是線程同步。

以後開發,建議使用StringBuilder。

JDK升級的三個因素是:

1、提高效率

2、簡化書寫

3、提高安全性。

基本數據類型對象包裝類。

基本數據類型            對象包裝類

byte                     Byte

short  Short

int     Integer

long    Long

boolean                  Boolean

float     Float

double Double

char      Character

基本數據類型對象包裝類的最常見作用,就是用於基本數據類型和字符串類型之間做轉換。

基本數據類型轉成字符串:

1、基本數據類型+" "

2、基本數據類型.toString( 基本數據類型值 );

如:Integer.toString ( 34 );//將34整數變成“34”

字符串轉成基本數據類型。

1、xxx a = Xxx.parseXxx(String);

2、int a = Interger.parseInt ( "123" );

3、double b = Double.parseDouble ( "12.36" );

4、boolean c = Boolean.parseBoolean ( "true");

十進制轉成其他進制。

toBinaryString ( );

toHexString ( );

toOctalString ( );

其他進制轉成十進制。

parseInt ( string,radix);

String:代表要轉化爲10進制的數。

Radix:表示被轉化的進制。

Integer a = 127.

Integer b = 127.

a == b結果爲true。因爲a和b執行了同一個Integer對象。因爲當數值在byte範圍內容,對於新特性,如果該數值已經存在,則不會再開闢新的空間。

------- android培訓java培訓、期待與您交流! ----------  詳細請查看:http://edu.csdn.net/heima/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章