java String、StringBuffer、StringBuilder

Stringjava

將字節數組或者字符數組轉成字符串能夠經過String類的構造函數完成。
正則表達式

char[] arr = {'w','a','p','q','x'};
String s = new String(arr,1,3);
System.out.println("s="+s);

結果爲:apq  將數組轉換爲字符串 而後輸出其中的 1到3的數值

String類的特色: 字符串對象一旦被初始化就不會被改變。數組

String s = "abc";//建立一個字符串對象在常量池中。		
String s1 = new String("abc");//建立兩個對象一個new一個字符串對象在堆內存中。

System.out.println(s==s1);//false   由於兩個對象的指向位置不一樣
System.out.println(s.equals(s1)); //true 由於兩個字符串的值相等的

String對象經常使用的方法

1,獲取:多線程

    1.1 獲取字符串中字符的個數(長度).app

        int length();函數

    1.2 根據位置獲取字符。ui

        char charAt(int index);spa

    1.3 根據字符獲取在字符串中的第一次出現的位置.線程

        int indexOf(int ch)code

        int indexOf(int ch,int fromIndex):從指定位置進行ch的查找第一次出現位置 

        int indexOf(String str);

        int indexOf(String str,int fromIndex);

        根據字符串獲取在字符串中的第一次出現的位置.

        int lastIndexOf(int ch)

        int lastIndexOf(int ch,int fromIndex):從指定位置進行ch的查找第一次出現位置 

        int lastIndexOf(String str);

        int lastIndexOf(String str,int fromIndex);

    1.4 獲取字符串中一部分字符串。也叫子串.

        String substring(int beginIndex, int endIndex)//包含begin 不包含end 。

        String substring(int beginIndex);

String  s = "abcdae";
System.out.println("length:"+s.length()); //length 6
System.out.println("char:"+s.charAt(2)); //char c  
System.out.println("index:"+s.indexOf('k'));//index -1   -1不存在
System.out.println("lastIndex:"+s.lastIndexOf('a'));//lastIndex 4 從後面開始出現a的位置
System.out.println("substring:"+s.substring(2,4)); //substring cd 取出子字符串

2,轉換。

    2.1 將字符串變成字符串數組(字符串的切割)

        String[]  split(String regex):涉及到正則表達式.

    2.2 將字符串變成字符數組。

        char[] toCharArray();

    2.3 將字符串變成字節數組。

        byte[] getBytes();

    2.4 將字符串中的字母轉成大小寫。

        String toUpperCase():大寫

        String toLowerCase():小寫

    2.5  將字符串中的內容進行替換

        String replace(char oldch,char newch);

        String replace(String s1,String s2);

    2.6 將字符串兩端的空格去除。

        String trim();

    2.7 將字符串進行鏈接 。

        String concat(string);

String  s = "張三,李四,王五";
String[] arr = s.split(",");     //正則表達式 		
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);    //張三 李四 王五  以逗號爲分割符,取值
}
		
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i++) {
    System.out.println(chs[i]);   //張 三 , 李 四 , 王 五  (每一個字節取一次)
}
s = "ab你";
byte[] bytes = s.getBytes();
for (int i = 0; i < bytes.length; i++) {
    System.out.println(bytes[i]);  //97 98 -60 -29 (a b的ASCII碼,漢字Unicode碼 兩個字節 而且首位1因此負的)
} 
		
System.out.println("Abc".toUpperCase());
String s1 = "java";
String s2 = s1.replace('q', 'z');   //替換字符,沒有的話 不替換
System.out.println(s1==s2);   //true
		
System.out.println("-"+"    ab  c    ".trim()+"-");  // -ab  c- 去除兩端的空格

 replace並不會直接在原字符串上進行修改

String s1 = "hello";
String s2 = "java";            
s2.replace('j','o');
System.out.println(s2);  //值爲 java

s1 = s2.replace('j','o');
System.out.println(s1);  //值爲 oava

3,判斷

    3.1 兩個字符串內容是否相同啊?

        boolean equals(Object obj);

        boolean equalsIgnoreCase(string str);忽略大寫比較字符串內容。

    3.2 字符串中是否包含指定字符串?

        boolean contains(string str);

    3.3 字符串是否以指定字符串開頭。是否以指定字符串結尾。

        boolean startsWith(string);

        boolean endsWith(string);

String s = "abc";
System.out.println(s.equals("ABC".toLowerCase()));   //true
System.out.println(s.equalsIgnoreCase("ABC"));       //true 
System.out.println(s.contains("cc"));                //false

String str  = "ArrayDemo.java";
System.out.println(str.startsWith("Array"));        //true
System.out.println(str.endsWith(".java"));          //true
System.out.println(str.contains("Demo"));           //true

4,比較。

        int compareTo(string);

   System.out.println("abc".compareTo("aqz"));     //返回 -15

String s1 = new String("abc");
String s2 = s1.intern();
System.out.println(s1.equals(s2));  // true
System.out.println(s1 == s2);    //false

 StringBuffer:就是字符串緩衝區。用於存儲數據的容器。

 特色:

1,長度的可變的。 

2,能夠存儲不一樣類型數據。

3,最終要轉成字符串進行使用。

4,能夠對字符串進行修改。

既然是一個容器對象。應該具有什麼功能呢?

1,添加:

    StringBuffer append(data);

    StringBuffer insert(index,data);

2,刪除:

    StringBuffer delete(start,end):包含頭,不包含尾。

    StringBuffer deleteCharAt(int index):刪除指定位置的元素 

3,查找:

    char charAt(index);

    int indexOf(string);

    int lastIndexOf(string);

4,修改:

    StringBuffer replace(start,end,string);

    void setCharAt(index,char);

增刪改查  C(create)U(update)R(read)D(delete) 

StringBuffer sb = new StringBuffer("abce");
sb.replace(1, 3, "nba");   //替換bc 爲 nba  變爲anbae
sb.delete(1, 3);           //刪除nb  變爲aae
sb.setCharAt(2, 'q');      //替換e爲q 變爲aaq
sb.reverse();              //字符串反轉 eea 
sb.delete(0,sb.length());   //清空數組區

StringBuffer sb = new StringBuffer("abce");
sb.append("xixi");           //末尾添加xixi   變爲abcexixi
sb.insert(2, "qq");          //在2處添加 qq   變爲abqqce
sb.append(4).append(false);  //末尾添加 4false

StringBuilder API與StringBuffer同樣

String StringBuffer StringBuilder區別:

String 類型和 StringBuffer 類型的區別: String 是不可變的對象

StringBuffer是線程同步的。一般用於多線程。

StringBuilder是線程不一樣步的。一般用於單線程。 它的出現提升效率。

java 內存分配 圖解

public class StringBuilderTest {
	public static void main(String[] args) {

		StringBuilder s1 = new StringBuilder("hello");
		StringBuilder s2 = new StringBuilder("java");
		
		System.out.println(s1+"......."+s2);  //指向建立對象地址 
		show(s1,s2);
		
		System.out.println(s1+"......."+s2);  //指向開始時建立對象的地址
		
	}

	private static void show(StringBuilder s1, StringBuilder s2) {
		
		s1.append(s2);
		System.out.println(s1+"......."+s2);  
		s1 = s2;    //這個是 局部變量中 地址變化 全局的沒有變
		System.out.println(s1+"......."+s2);
	}
	
}

輸出結果

先分配兩個對象內存

第一個 打印出的結果  hello.......java

 調用show方法 內存變化append後內存變化

show中打印出來的結果 hellojava.......java

 因爲在show函數中 s1=s2,s1地址指向s2,因此內容都爲java

s1 = s2 後結果          java.......java

show方法調用完成後,釋放內存  可是因爲show方法對0x44地址內容進行了添加,因此,內容變了 結果  hellojava.......java


StringBuilder轉換爲String  方法

StringBuilder zanArray;

zanArray.toString();          //StringBuilder轉換爲String  方法     

int轉換string方法

int position;

String s;

s = position+"";

相關文章
相關標籤/搜索