——String類,StringBuffer類,StringBuilder類的簡述和操作。

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity開發</a>、<a href="http://www.itheima.com"target="blank">.Net培訓</a>、期待與您交流! ----------------------

String類

   字符串類同於描述字符串事物。如姓名等。

   字符串是一個特殊的對象

   字符串一旦初始化就不可以被改變,即一個字符串常量。

   字符串是常量;它們的值在創建之後不能更改。

   字符串緩衝區支持可變的字符串。因爲 String 對象是不可變的,所以可以共享。

   例如:

     String str = "abc";

   等效於:

     char data[] = {'a', 'b', 'c'};

     String str = new String(data);

     即,此處有4個對象。

   String s1 = "abc"//s1是一個類類型對象,"abc"是一個對象。

   s1 = "kk"。此時改變的不是"abc"對象,而是str所執行的對象地址。

   String s2 = new String("abc");

   s1 與 s2的區別。

   s1在內存中有一個對象。

   s2在內存中有兩個對象。

   注:String類是一個終類,即不能被繼承。



  String類常見的操作:

     1,獲取:

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

    int length()--獲取長度。

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

char charAt(int index)

1.3,根據字符獲取在字符串中的位置。

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

--從fromIndex指定的位置開始,獲得ch在字符串中出現的位置。

int indexOf(char ch,int fromIndex)

--返回的是str在字符串中第一次出現的位置。

int indexOf(String str)

--從fromIndex指定的位置開始,獲得str在字符串中第一次出現的位置。

int indexOf(String str,int fromIndex)

--獲得字符串中最後一個字符(也可以是字符串)ch出現的位置

int lastIndexOf(char ch)。


     2,判斷:

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

boolean contains(String str)

特殊之處:indexOf(String str):可以索引str第一次出現的位置,如果返回-1表示str不在字符串中。

所以,也可以用於判斷字符串中是否包含指定的子串。

if(str.indexOf("a") != -1)

且該方法既可以判斷,也可以獲取子串出現的位置。

2.2,字符串中是否有內容。

boolean isEmpty():原理是判斷字符串長度是否爲0.(1.6版本後纔有)

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

boolean startWith(String str)

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

boolean endWith(String str)

2.5,判斷字符串內容是否相等,覆寫了Object類中的toString()方法。

boolean equals(String str)

2.6,判斷字符串內容是否相等,並忽略大小寫。

boolean equalsIgnoreCase(String str)

     3,轉換:

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

構造函數:
String(char[])

//將字符數組中的從offset位置的count個字符轉成字符串。

String(char[] chs,int offset,int count)

靜態方法:

//返回指定數組中表示該字符序列的 String。

static String copyValueOf(char[] chs);

//返回指定數組中一部分表示該字符序列的 String。

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

static String valueOf(char[] chs);

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

char[] toCharArray();

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

String(byte[] bs)

//將字節數組中的一部分轉成字符串

String(byte[] bs,int offset,int count)

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

byte[] getBytes();

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

static String valueOf(int)

static String valueOf(double)
.
.
.
特殊:字符串和字節數組在轉換過程中,是可以指定編碼表的。

     4,替換:

4.1String replace(oldchar,newchar);

    5,切割:

5.1String[] split(String str);

    6,子串,獲取字符串中的一部分:

//從begin開始截取到字符串末尾。

6.1String substring(int begin);

//從begin位置開始截取到end-1.

6.2String substring(int begin,int end);包含頭,不包含尾。!!



     7,大小寫轉換,取出空格,比較。

7.1,大小寫轉換

    //轉成大寫

    String toUpperCase();

    //轉成小寫
    String toLowerCase();

7.2,將字符串兩端空格去掉。

    String trim();

7.3,對兩個字符串進行字典比較

    //區分大小寫比較

    String compareTo(String str);

    //不區分大小寫比較

    String compareToIgnoreCase(String str);

示例代碼:

package com.itheima.stringdemos;

import java.util.Arrays;

/**
 * 字符串中常用操作的測試類
 * @author wuyong
 *
 */
public class StringTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {

		
		String str = "abcsfgae3";
		sop("=================獲取=================");
		
//		1.1,字符串中包含的字符數,也就是字符串的長度。
		sop(str.length());
		
//     	1.2,根據位置獲取位置上的某個字符。
		sop(str.charAt(3));
		
//     	1.3,根據字符獲取在字符串中的位置。
		sop("f的位置--" + str.indexOf('f'));
		
//     	從fromIndex指定的位置開始,獲得ch在字符串中出現的位置。
		sop("e的位置--" + str.indexOf('e', 3));
		
//     	--返回的是str在字符串中第一次出現的位置。
		sop("cs的位置--" + str.indexOf("cs"));
		
//     	--從fromIndex指定的位置開始,獲得str在字符串中第一次出現的位置。
		sop("bc的位置--" + str.indexOf("bc",4));
		
//     	--獲得字符串中最後一個字符(也可以是字符串)ch出現的位置
		sop("最後a的位置--" + str.lastIndexOf('a'));
		
		
		sop("=================判斷=================");
//		2.1,字符串中是否包含某一個子串
		sop("fg是否存在--" + str.contains("fg"));
		
//		2.2,字符串中是否有內容。
		sop("str是否爲空字符串--" + str.isEmpty());
		
//		2.3,字符串是否是一指定內容開頭。
		sop("str是否已12開頭的位置--" + str.startsWith("12"));
		
//		2.4,字符串是否是一指定內容結尾。
		sop("字符串str是否以es結尾--" + str.endsWith("es"));
		
//		2.5,判斷字符串內容是否相等,覆寫了Object類中的toString()方法。
		sop("字符串str是否等於asd--" + str.equals("asd"));
		
//		2.6,判斷字符串內容是否相等,並忽略大小寫。
		sop("str忽略大小寫是否等於abcsFGaE3--" + str.equalsIgnoreCase("abcsFGaE3"));
		
		sop("=================轉換=================");
		
//		3.1,將字符串數組轉成字符串。
		char[] chs = {'a','2','s','e'};
		String chsStr = new String(chs);
		sop("構造函數下chsStr--" + chsStr);
		
//			//將字符數組中的從offset位置的count個字符轉成字符串。
		chsStr = new String(chs,2,2);
		sop("多參構造函數chsStr--" + chsStr);
//		靜態方法:
			sop("copyValueOf(char[] chs)方法chsStr--" + String.copyValueOf(chs));
			
			sop("copyValueOf(char[] chs,off,count)chsStr--" + String.copyValueOf(chs,1,2));
			
			sop("valueOf==chsStr--" + String.valueOf(chs));
			
//	3.2,將字符串轉成字符數組。
			char[] chs2 = chsStr.toCharArray();
			for (char c : chs2) {
				sop(c);
			}
			
//	3.3,將字節數組轉換成字符串。
		byte[] bs = {98,49,112,97};
		sop("String(byte[] bs) --" + new String(bs));;
		
//		//將字節數組中的一部分轉成字符串
		sop("String(byte[] bs,off,count) --" + new String(bs,0,3));
		
//	3.4,將字符串轉成字節數組
		byte[] bs2 = new String(bs).getBytes();
		for (byte b : bs2) {
			sop(b);
		}
		
//	3.5,將基本數據類型轉成字符串。
		sop(String.valueOf(3));
		sop(String.valueOf(12.45));
//		.
//		.
//		.
//		特殊:字符串和字節數組在轉換過程中,是可以指定編碼的
	}
	
	/**
	 * 自定義輸出方法,封裝了System.out.println()語句
	 * @param obj
	 */
	public static void sop(Object obj) {
		System.out.println(obj);
	}

}

StringBuffer

  StringBuffer是字符串緩衝區,是一個容器,

  線程安全的可變字符序列。
  特點:

1,其長度是可以變化的。

2,可以操作多個數據類型。

3,最終或通過toString方法變成字符串。



  通常會有一下操作:

1,C create 增加

2,U update 修改
3,R read   查看
4,D delete 刪除

  1,存儲:

1,初始化時的,傳入參數可以存儲。new StringBuffer(形參)

2,StringBuffer append(形參);將指定數據作爲參數添加到數據結尾處。

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


  2,刪除:

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

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

  3,獲取:

char charAt(int index):獲取指定位置的字符

int indexOf(String str):獲取指定字符串的位置

int lastIndexOf(String str):獲取指定字符串的最後出現的位置

int length():獲取緩衝區的長度。

String substring(int start,int end):獲取字符串中start開始到end位置的子串。

  4,修改:

StringBuffer repalce(int start,int end,String str);將start位置到end位置替換成str字符串。

void setChartAt(int index,char ch):將指定位置的子符替換成ch。

  5,反轉:

StringBuffer reverse():反轉。

StringBuffer與StringBuilder的區別和關係:

    StringBuilder:

StringBuilder是JDK1.5新加的功能,目的在於提高對字符串的操作的效率。

   區別:

    1,StringBuffer在多線程時,線程安全的可變字符序列,但是由於同步的原因,每次都要判斷鎖,所以效率較低。

    2,StringBuilder 是線程不安全的,但是效率比StringBuffer高,開發中優先使用它。

   關係:

StringBuilder提供了與StringBuffer提供了兼容的功能。

示例代碼:

package com.itheima.stringdemos;


/**
 * StringBuffer的相關操作
 * @author wuyong
 *
 */
public class StringBufferTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		sop("--------------存儲----------------");
		buffer_add();
		sop("--------------刪除----------------");
		buffer_del();
		sop("--------------獲取----------------");
		buffer_get();
		sop("--------------修改----------------");
		buffer_modify();
		sop("--------------反轉----------------");
		buffer_reverse();
	}
	/**
	 * 存儲
	 */
	private static void buffer_add() {
		//初始化時添加數據
		StringBuffer sb = new StringBuffer("abc");
		
		//用append方法添加到數據末尾。
		sb.append('t').append(true).append(123);
		
		//用insert方法將指定值插入到指定位置。
		sb.insert(2, "QQ");
		sop("存儲--》sb == " + sb);
	}
	/**
	 * 刪除
	 */
	public static void buffer_del() {
		StringBuffer sb = new StringBuffer("abcdefg123345");
		sop("刪除前--》" + sb);
		
		sb.delete(2, 5);
		sop("delete(int start,int end):刪除後--》" + sb);
		
		sb.deleteCharAt(8);
		sop("deleteCharAt(int index):刪除後--》" + sb);
		
		//清空StringBuffer
		sop("清空後的長度--》" + sb.delete(0, sb.length()).length());
	}
	/**
	 * 獲取
	 */
	public static void buffer_get() {
		StringBuffer sb = new StringBuffer("abcdefag123345");
		sop("sb是--》" + sb);
		//char charAt(int index);獲取指定位置的字符
		sop("下標爲2的字符是--》" + sb.charAt(2));
		
		//int indexOf(String str):獲取指定字符串的位置
		sop("字符串“123”的開始位置是--》" + sb.indexOf("123"));
		
		//int lastIndexOf(String str):獲取指定字符串的最後出現的位置
		sop("最後一個a出現的位置是--》" + sb.lastIndexOf("a"));
		
		//int length():獲取緩衝區的長度。
		sop("sb的長度是--》" + sb.length());
		
		//String substring(int start,int end):獲取字符串中start開始到end位置的子串。
		sop("sb中下標2到6的字符串是--》" + sb.substring(2, 6));
	}
	
	/**
	 * 修改
	 */
	public static void buffer_modify() {
		StringBuffer sb = new StringBuffer("abcde");
		sop("sb在替換前--》" + sb);
		
		sop("sb調用repace替換後是--》" + sb.replace(1, 3, "12"));
		
		sb.setCharAt(0, 'W');
		sop("sb調用setCharAt替換後是--》" + sb);
	}
	
	/**
	 * 反轉
	 */
	public static void buffer_reverse() {
		StringBuffer sb = new StringBuffer("12345");
		sop("sb反轉前是--》" + sb);
		
		sop("sb反轉後是--》" + sb.reverse());
	}
	
	/**
	 * 自定義的輸出的方法
	 * @param obj
	 */
	public static void sop(Object obj) {
		System.out.println(obj);
	}
}

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity開發</a>、<a href="http://www.itheima.com"target="blank">.Net培訓</a>、期待與您交流! ----------------------

 
發佈了25 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章