日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

[转载] Java中的字符串处理

發布時間:2025/3/11 java 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载] Java中的字符串处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考鏈接: Java中的StringBuffer appendCodePoint()方法以及示例

JDK8在線Api中文手冊?

JDK8在線Api英文手冊?

?

?Java中的字符串處理

?1.1 String類的構造函數1.2 字符串的長度1.3 特殊的字符串操作1.3.1 字符串字面值1.3.2 字符串連接1.3.3 字符串和其他數據類型的連接1.3.4 字符串轉換和toString()方法

? ? ? 1.4 提取字符串1.4.1 charAt()1.4.2 getChars()1.4.3 getBytes()1.4.4 toCharArray()

? ? ? 1.5 比較字符串1.5.1 equals()和equalsIgnoreCase()1.5.2 regionMatches()1.5.3 startsWith()和endsWith()1.5.4 equals()與==1.5.6 compareTo()

? ? ? 1.6 查找字符串1.7 修改字符串1.7.1 substring()1.7.2 concat()1.7.3 replace()1.7.4 trim()

? ? ? 1.8 使用valueOf()轉換數據1.9 改變字符串中字符的大小寫1.10 連接字符串1.11 其他String方法1.12 StringBuffer類1.12.1 StringBuffer類的構造函數1.12.2 length() 與 capacity()1.12.3 ensureCapacity()1.12.4 setLength()1.12.5 charAt() 與 setCharAt()1.12.6 getChars()1.12.7 append()1.12.8 insert()1.12.9 reverse()1.12.10 delete() 與 deleteCharAt()1.12.11 replace()1.12.12 substring()1.12.13 其他StringBuffer方法

? ? ? 1.13 StringBuilder類

? ??

? ?

??

?

?

? ? 與大多數其他編程語言一樣,在Java中,字符串也是一連串的字符。但是,不像其他語言一樣作為字符數組實現字符串,Java將字符串實現為String類型的對象。

? ? 作為內置對象實現字符串,使得Java可以提供許多方便字符串處理的特性。例如,Java提供了用于比較兩個字符串、查找子串、連接兩個字符串以及改變字符串中字母大小寫的方法。此外,可以通過多種方式構造String對象,從而當需要時可以很容易地獲取字符串。

? ? 當創建String對象時,創建的字符串不能修改。也就是說,一旦創建一個String對象,就不能改變這個字符串中包含的字符。乍一看,這好像有一個嚴重的限制。但是,情況并非如此。仍然可以執行各種字符串操作。區別是,當每次需要已存在字符串的修改版本時,會創建包含修改后內容的新String對象。原始字符串保持不變。使用這種方式的原因是:實現固定的,不能修改的字符串與實現能修改的字符串相比較效率更高。對于那些需要能夠修改的字符串的情況,Java提供了兩個選擇:StringBuffer和StringBuilder,這兩個類用來保存在創建之后可以進行修改的字符串。

? ? String、StringBuffer、StringBuilder類都是在java.lang中定義的。因此,所有程序自動都可以使用它們。所有這些類被聲明為final,這意味著這些類不能有子類。這使得對于通用的字符串操作,可以采取特定的優化以提高性能。這3個類實現了CharSequence接口。

? ? 最后一點,所謂String類型對象中的字符串是不可改變的,是指創建了String實例后不能修改String實例的內容。但是,在任何時候都可以修改String引用變量,使其指向其他String對象。

?

1.1 String類的構造函數?

? ?String類支持幾個構造函數。為了創建空的String,可以調用默認構造函數。例如:?

String s = new String();

?

? ?將創建內部沒有任何字符的String實例。? ? 經常會希望創建具有初始化值的字符串。String類提供了各種構造函數來解決這個問題。為了創建由字符數組初始化的String實例,可以使用如下所示的構造函數:?

String(char chars[])

?

? ?下面是一個例子:?

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

String s = new String(chars);

?

? ?這個構造函數使用字符串"abc"初始化s。? ? 使用下面的構造函數,可以指定字符數組的子范圍作為初始化部分:?

String(char chars[],int startIndex,int numChars)

?

? ?其中,startIndex指定了子范圍開始位置的索引,numChars指定了使用的字符數量。下面是一個例子:?

char chars[] = {'a','b','c','d','e','f'};

String s = new String(chars,2,3);

?

? ?這會使用字符cde初始化s。? ? 使用下面這個構造函數,可以構造與另外一個String對象包含相同字符的String對象:?

String(String strOb)

?

? ?在此,strObj是一個String對象。分析下面這個例子:?

//Construct one String from another

class MakeString {

?public static void main(String[] args) {

? ? ? char c[] ={'J','a','v','a'};

? ? ? String s1 = new String(c);

? ? ? String s2 = new String(s1);

? ? ? System.out.println(s1);

? ? ? System.out.println(s2);

? ? ? /**

? ? ? ?* 輸出:

? ? ? ?* Java

? ? ? ?* Java

? ? ? ?*/

? }

}

?

? ?可以看出,s1和s2包含相同的字符串。? ? 盡管Java的char類型使用16位表示基本的Unicode字符集,但是在Internet上,字符串的典型格式是使用從ASCII字符集構造的8位字節數組。因為8位的ASCII字符串很普遍,所以String類提供了使用字節數組初始化字符串的構造函數。下面是其中的兩種形式:?

String(byte chrs[])

String(byte chrs[],int startIndex,int numChars)

?

? ?在此,chrs指定字節數組。上面的第二種形式允許指定子范圍。在這兩個構造函數中,從字節到字符的轉換是使用平臺的默認字符編碼完成的。下面程序演示了這些構造函數的使用:?

//Construct string from subset of char array.

class SubStringCons {

? public static void main(String[] args) {

? ? ? byte ascii[]={65,66,67,68,69,70};

? ? ? String s1 = new String(ascii);

? ? ? System.out.println(s1);

? ? ? String s2 = new String(ascii,2,3);

? ? ? System.out.println(s2);

? ? ? /**

? ? ? ?* 輸出

? ? ? ?* ABCDEF

? ? ? ?* CDE

? ? ? ?*/

? }

}

?

? ?Java還定義了字節到字符串(byte-to-string)構造函數的擴展版本,在擴展版本中可以指定字符的編碼方式,這決定了如何將字節轉換成字符。但是,通常會希望使用平臺提供的默認編碼方式。? ? 注意? ? 無論何時,從數組創建String對象都會復制數組的內容。在創建字符串之后,如果修改數組的內容,String對象不會發生變化。? ? 使用下面的構造函數,可以從StringBuffer構造String實例:?

String(StringBuffer strBufObj)

?

? ?使用下面這個構造函數,可以從StringBuilder構造String實例:?

String(StringBulider strBuildObj)

?

? ?下面的構造函數支持擴展Unicode字符集:?

String(int codePoints[],int startIndex,int numChars)

?

? ?其中codePoints是包含Unicode代碼點的數組。結果字符串從startIndex開始,截取numChars個字符。? ? Java還定義了允許指定Charset的構造函數。?

1.2 字符串的長度?

? ?字符串的長度是指字符串所包含字符的數量。為了獲取這個值,調用length()方法,如下所示:?

int length()

?

1.3 特殊的字符串操作?

? ?因為字符串在編程中十分常見,也很重要,所以Java語言在語法中為一些字符串操作添加了特殊的支持。這些操作包括從字符串字面值自動創建新的String實例,使用"+"運算符連接多個字符串,以及將其他數據類型轉換為字符串表示形式。盡管有顯式的方法可以執行這些操作,但是Java可以自動完成這些操作,從而程序員提供便利并增加代碼的清晰度。?

1.3.1 字符串字面值?

? ?前面的例子顯示了如何使用new運算符從字符數組顯示地創建String實例。但是,還有更容易的方式,即使用字符串字面值。對于程序中的每個字符串字面值,Java會自動構造String對象。因此,可以使用字符串字面值初始化String對象。例如,下面的代碼段創建了兩個相等的字符串:?

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

String s1 = new String(chars);

String s2 = "abc";//use string literal

?

? ?因為會為每個字符串字面值創建String對象,所以在能夠使用String對象的任何地方都可以使用字符串字面值。例如,可以直接對加引號的字符串調用方法,就好像它們是對象引用一樣,如下面的語句所示。下面的代碼對字符串"abc"調用length()方法。正如所期望的那樣,該語句輸出"3"。?

System.out.println("abc".length());

?

1.3.2 字符串連接?

? ?一般而言,Java不允許為String對象應用運算符。這個規則的一個例外是"+“運算符,”+“運算符可連接兩個字符串,生成一個String對象作為結果。還可以將一系列”+"運算符連接在一起。例如,下面的代碼段連接3個字符串:?

String age = "9";

String s = "He is" + age + " years old.";

System.out.println(s);

?

? ?上面的代碼會顯示字符串"He is 9 years old."?

1.3.3 字符串和其他數據類型的連接?

? ?可以將字符串和其他類型數據連接起來。例如,分析與前面例子稍微不同的版本。?

int age = 9;

String s = "He is" + age + " years old.";

System.out.println(s);

?

? ?首先,age是int類型,而不是String類型,但是生成的輸出和前面的例子相同。這是因為age中的int值會在String對象中被自動轉換成相應的字符串表示形式。然后再像以前那樣連接這個字符串。只要"+"運算符的其他操作數是String實例,編譯器就會把操作數轉換為相應的字符串等價形式。? ? 但是,當將其他類型的操作和字符串連接表達式混合到一起時,應當小心。可能會得到出乎意料的結果,分析下面的代碼:?

String s = "four: " + 2 + 2;

System.out.println(s)

?

? ?該代碼會顯示:? ? front: 22? ? 而不是我們可能期望的:? ? front: 4? ? 下面是其中的原因。運算符優先級導致首先連接"four"和2的字符串等價形式,然后再將這個運算的結果和2的字符串等價形式連接起來。為了首先完成整數相加運算,必須使用圓括號,像下面這樣:?

String s = "four: " + (2 + 2);

?

? ?現在s包含字符串"four: 4"?

1.3.4 字符串轉換和toString()方法?

? ?當Java在執行連接操作期間,將數據轉換成相應的字符串表示形式時,是通過調用String定義的字符串轉換方式valueOf()的某個重載版本來完成的。valueOf()針對所有基本類型以及Object類型進行了重載。對于基本類型,valueOf()方法返回一個字符串,該字符串包含與調用值等價的人類可以閱讀的形式。對于對象,valueOf()方法調用對象的toString()方法。toString()方法決定了所有創建類對象的字符串表示形式。? ? 每個類都實現了toString()方法,因為該方法是由Object定義的。然而,toString()方法的默認實現很少能夠滿足需要。對于自己創建的大多數重要類,我們可能希望重寫toString()方法并提供自己的字符串表示形式。幸運的是,這很容易完成。toString()方法的一般形式如下:?

String toString()

?

? ?為了實現toString()方法,可簡單地返回一個String對象,使其包含用來描述自定義類對象的人類可閱讀的字符串。? ? 為創建的類重寫toString()方法,可以將其完全集成到Java開發環境中。例如,可以把它們用于print()和println()語句,還可以用于字符串連接表達式中。下面的程序通過Box類重寫toString()方法,演示了這一點:?

//Override toString() for Box class.

class Box {

? ?double width;

? ?double height;

? ?double depth;

? ?Box(double w, double h, double d) {

? ? ? ?width = w;

? ? ? ?height = h;

? ? ? ?depth = h;

? ?}

? ?@Override

? ?public String toString() {

? ? ? ?return "Dimensions are " + width + " by " + depth + " by " + height + ".";

? ?}

}

class toStringDemo {

?public static void main(String[] args) {

? ? ? Box b = new Box(10, 12, 14);

? ? ? String s = "Box b:" + b;//concatenate Box object

? ? ? System.out.println(b);//convert Box to string

? ? ? System.out.println(s);

? ? ? /**

? ? ? ?* 輸出:

? ? ? ?* Dimensions are 10.0 by 12.0 by 12.0.

? ? ? ?* Box b:Dimensions are 10.0 by 12.0 by 12.0.

? ? ? ?*/

? }

}

?

? ?可以看出,在連接表達式或println()調用中使用Box對象時,會自動調用Box的toString()方法。?

1.4 提取字符串?

? ?String類提供了大量方法,用于從String對象中提取字符。在此介紹其中的幾個。盡管不能向索引數組中的字符那樣,索引構成String對象中字符串的字符,但是許多String方法為字符串使用索引(或偏移)來完成它們的操作。和數組一樣,字符串索引也是從0開始的。?

1.4.1 charAt()?

? ?為了從字符串中提取單個字符,可以通過charAt()方法直接引用某個單個字符。該方法的一般形式如下:?

char charAt(int where)

?

? ?其中,where是希望獲取的字符的索引,where的值必須是非負的,并且能夠指定字符串中的一個位置,charAt()方法返回指定位置的字符。例如:?

char ch;

ch = "abc".charAt(1);

?

? ?將b賦給ch。?

1.4.2 getChars()?

? ?如果希望一次提取多個字符,可以使用getChars()方法。它的一般形式為:?

void getChars(int sourceStart,int sourceEnd,char target[],int targetStart)

?

? ?其中sourceStart指定了子串的開始索引,sourceEnd指定了子串末尾之后下一個字符的索引。因此,子串包含字符串中索引從sourceStart到sourceEnd-1之間的字符。target指定了接收字符的數組。在target中開始復制子串的索引是由targetStart傳遞的。注意必須確保target數組足夠大,以容納指定子串的字符。?

class getCharsDemo {

? public static void main(String[] args) {

? ? ? ?String s = "This is a demo of the getChars method.";

? ? ? ?int start = 10;

? ? ? ?int end = 14;

? ? ? ?char buf[] = new char[end - start];

? ? ? ?s.getChars(start, end, buf, 0);

? ? ? ?System.out.println(buf);

? ? ? ?/**

? ? ? ? * 輸出:

? ? ? ? * demo

? ? ? ? */

? ?}

}

?

1.4.3 getBytes()?

? ?getChars()的一種替代選擇是將字符保存在字節數組中。這個方法是getBytes(),它使用平臺提供的從字符到字節轉換的默認方法。下面是getBytes()方法最簡單的形式:?

byte[] getBytes()

?

? ?getBytes()方法還有其他形式。當將String值導出到不支持16位Unicode字符的環境中時,最常使用getBytes()方法。例如,大部分Internet協議和文本文件格式為文本交互使用8位ASCII碼。?

1.4.4 toCharArray()?

? ?如果希望將String對象中的所有字符轉換位字符數組,最簡單的方法是調用toCharArray()。該方法為整個字符串返回字符數組,它的一般形式如下:?

char[] toCharArray()

?

? ?這個方法是為了方便操作而提供的,因為可以使用getChars()得到相同的結果。?

1.5 比較字符串?

? ?String類提供了大量用來比較字符串或字符串中子串的方法,在此將介紹其中的幾個。?

1.5.1 equals()和equalsIgnoreCase()?

? ?為了比較兩個字符串是否相等,可以使用equals()方法,它的一般形式如下:?

boolean equals(Object str)

?

? ?其中,str是將要與調用String對象進行比較的String對象。如果字符串以相同的順序包含相同的字符,該方法返回true,否則返回false。比較是大小寫敏感的。? ? 為了執行忽略大小寫區別的比較,可以調用equalsIgnoreCase()。該方法在比較兩個字符串時,認為A-Z和a-z是相同的,它的一般形式如下:?

boolean equalsIgnoreCase(String str)

?

? ?其中,str是將要與調用String對象進行比較的String對象。如果字符串以相同的順序包含相同的字符,該方法返回true,否則返回false。? ? 下面是演示equals()和equalsIgnoreCase()的例子:?

//Demonstrate equals() and equalsIgnoreCase().

class equalsDemo {

? public static void main(String[] args) {

? ? ? ?String s1 = "Hello";

? ? ? ?String s2 = "Hello";

? ? ? ?String s3 = "Good-bye";

? ? ? ?String s4 = "HELLO";

? ? ? ?System.out.println(s1 + " equals " + s2 + " -> "+s1.equals(s2));

? ? ? ?System.out.println(s1 + " equals " + s3 + " -> "+s1.equals(s3));

? ? ? ?System.out.println(s1 + " equals " + s4 + " -> "+s1.equals(s4));

? ? ? ?System.out.println(s1 + " equalsIgnoreCase " + s4 + " -> "+s1.equalsIgnoreCase(s4));

? ? ? ?/**

? ? ? ? * 輸出:

? ? ? ? * Hello equals Hello -> true

? ? ? ? * Hello equals Good-bye -> false

? ? ? ? * Hello equals HELLO -> false

? ? ? ? * Hello equalsIgnoreCase HELLO -> true

? ? ? ? */

? ?}

}

?

1.5.2 regionMatches()?

? ?regionMatches()方法比較字符串中某個特定部分與另一個字符串中的另一個特定部分。該方法還有一種重載形式,允許在這種比較中忽略大小寫。這個方法的一般形式為:?

boolean regionMatches(int startIndex,String str2,int str2StartIndex,int numChars)

boolean regionMatches(boolean ignoreCase,int startIndex,String str2,int str2StartIndex,int numChars)

?

? ?對于這兩個版本,startIndex指定了調用String對象中比較部分開始的索引位置,,將與之進行比較的String對象是由str2指定的。str2中開始進行比較的索引位置是由str2StartIndex指定的。將要進行比較的子串的長度是由numChars傳遞的。在第二個版本中,如果ignoreCase為true,那么忽略字符的大小寫;否則,大小寫就是有意義的。?

1.5.3 startsWith()和endsWith()?

? ?String定義了兩個方法,它們大體上是regionMatches()方法的特定形式。startsWith()方法確定給定的String對象是否以指定的字符串開始。與之相反,endsWith()方法確定String對象是否以指定的字符串結束。它們的一般形式如下:?

boolean startsWith(String str)

boolean endsWith(String str)

?

? ?其中,str是將進行測試的String對象。如果字符串匹配,就返回true;否則返回false。例如:?

"Foobar".endsWith("bar")

?

? ?和?

"Foobar".startsWith("Foo")

?

? ?都返回true。? ? 下面是startsWith()方法的第二種形式,這種形式允許指定開始位置:?

boolean startsWith(String str,int startIndex)

?

? ?其中,startsIndex指定了在調用字符串中要開始查找位置的索引。例如:?

"Foobar".startsWith("bar",3)

?

? ?返回true。?

1.5.4 equals()與==?

? ?equals()方法與“==”運算符執行不同的操作,理解這一點很重要。剛才解釋過,equals()方法比較String對象中的字符。雙等號運算符比較對兩個對象的引用,查看它們是否指向相同的實例。下面的程序演示了兩個不同的String對象包含相同字符,但是如果過對這些對象的引用進行比較,就會發現它們是不相等的:?

//equals vs ==

class EqualsNotEqualTo {

? public static void main(String[] args) {

? ? ? ?String s1 = "Hello";

? ? ? ?String s2 = new String(s1);

? ? ? ?System.out.println(s1 + " equals " + s2 + " -> " + s1.equals(s2));

? ? ? ?System.out.println(s1 + " == " + s2 + " -> " + (s1 == s2));

? ? ? ?/**

? ? ? ? * 輸出:

? ? ? ? * Hello equals Hello -> true

? ? ? ? * Hello == Hello -> false

? ? ? ? */

? ?}

}

?

? ?變量s1引用由"Hello"創建的String實例,s2引用的對象是使用s1作為初始化器創建的。因此,兩個String對象的內容是相同的,但它們是不同的對象。這意味著s1和s2引用的是不同的對象,所以不是"=="的關系,正如前面程序的輸出所展示的。?

1.5.6 compareTo()?

? ?通常,只知道兩個字符串是否相同是不夠的。對于排序應用,需要知道哪個字符串小于、等于或大于下一個字符串。根據字典順序,如果一個字符串位于另一個字符串的前面,那么這個字符串小于另一個字符串;如果一個字符串位于另一個字符串的后面,那么這個字符串大于另一個字符串。方法compareTo()就是用于這個目的,該方法是由Comparable<T>接口定義的,String實現了這個接口。compareTo()方法的一般形式如下:?

int compareTo(String str)

?

? ?其中,str是將要與調用String對象進行比較的String對象。返回的比較結果給及相應解釋如下表所示:?

?

?compareTo()方法的返回結果

?

值含義小于0調用字符串小于str大于0調用字符串大于str0兩個字符串相等

? ?下面是一個對數組中的字符串進行排序的示例程序。該程序使用compareTo()方法為冒泡排序法確定排列順序:?

//A bubble sort for Strings.

class SortString {

static String arr[] = {"Now", "is", "the", "for", "all",

? ? ? ? ? "good", "men", "to", "come", "to", "the", "aid"

? ? ? ? ? , "of", "their", "country"};

?

? public static void main(String[] args) {

? ? ? for (int j = 0; j < arr.length; j++) {

? ? ? ? ? for (int i = j + 1; i < arr.length; i++) {

? ? ? ? ? ? ? if (arr[i].compareTo(arr[j]) < 0) {

? ? ? ? ? ? ? ? ? String t = arr[j];

? ? ? ? ? ? ? ? ? arr[j] = arr[i];

? ? ? ? ? ? ? ? ? arr[i] = t;

? ? ? ? ? ? ? }

? ? ? ? ? }

? ? ? ? ? System.out.println(arr[j]);

? ? ? }

? ? ? /**

? ? ? ?* 輸出:

? ? ? ?* Now

? ? ? ?* aid

? ? ? ?* all

? ? ? ?* come

? ? ? ?* country

? ? ? ?* for

? ? ? ?* good

? ? ? ?* is

? ? ? ?* men

? ? ? ?* of

? ? ? ?* the

? ? ? ?* the

? ? ? ?* their

? ? ? ?* to

? ? ? ?* to

? ? ? ?*/

? }

}

?

? ?從這個例子的輸出可以看出,compareTo()考慮字母的大小寫。單詞"Now"出現在所有其他單詞之前,因為它是以大寫字母開頭的,這意味著在ASCII字符集中它具有更小的值。? ? 當比較兩個字符串時,如果希望忽略大小寫區別,可以使用compareToIgnoreCase(),如下所示:?

int compareToIgnoreCase(String str)

?

? ?除了忽略大小寫外,這個方法的返回結果與compareTo()相同。如果在前面的程序中使用這個方法的話,"Now"將不再是第一個單詞。?

1.6 查找字符串?

? ?String類提供了兩個用于在字符串中查找指定字符或子串的方法:?

indexOf():查找字符或字符串第一次出現時的索引。lastIndexOf():查找字符和子串最后一次出現時的索引。? ? 這兩個方法都以不同的方式進行了重載。對于所有情況,這些方法都返回發現字符或子串時的索引位置,或返回-1表示查找失敗。? ? 為了查找字符第一次出現時的索引,使用:?

int indexOf(int ch)

?

? ?為了查找字符最后一次出現時的索引,使用:?

int lastIndexOf(int ch)

?

? ?其中,ch是將要查找的字符。? ? 為了查找子串第一次或最后一次出現時的索引,使用:?

int indexOf(String str)

int lastIndexOf(String str)

?

? ?其中,str指定了將要查找的子串。? ? 可以使用下面這些形式執行查找開始時的索引:?

int indexOf(int ch,int startIndex)

int lastIndexOf(int ch,int startIndex)

int indexOf(String str,int startIndex)

int lastIndexOf(String str,int startIndex)

?

? ?其中,startIndex指定了開始查找時的位置索引。對于indexOf(),查找操作從startIndex索引位置運行到字符串的末尾。對于lastIndexOf(),查找操作從startIndex運行到索引位置0。? ? 下面的例子展示了如何使用各種索引方法在String內部進行查找:?

//Demonstrate indexOf() and lastIndexOf().

class indexOfDemo {

?public static void main(String[] args) {

? ? ? String s = "Now is the time for all good men "

? ? ? ? ? ? ? + "to come to the aid of their country.";

? ? ? System.out.println(s);

? ? ? System.out.println("indexOf(t) = " + s.indexOf('t'));

? ? ? System.out.println("lastIndexOf(t) = " + s.lastIndexOf('t'));

? ? ? System.out.println("indexOf(the) = " + s.indexOf("the"));

? ? ? System.out.println("lastIndexOf(the) = " + s.lastIndexOf("the"));

? ? ? System.out.println("indexOf(t,10) = " + s.indexOf('t', 10));

? ? ? System.out.println("lastIndexOf(t,60) = " + s.lastIndexOf('t', 60));

? ? ? System.out.println("indexOf(the,10) = " + s.indexOf("the", 10));

? ? ? System.out.println("lastIndexOf(the,60) = " + s.lastIndexOf("the", 60));

? ? ? /**

? ? ? ?* 輸出:

? ? ? ?*Now is the time for all good men to come to the aid of their country.

? ? ? ?* indexOf(t) = 7

? ? ? ?* lastIndexOf(t) = 65

? ? ? ?* indexOf(the) = 7

? ? ? ?* lastIndexOf(the) = 55

? ? ? ?* indexOf(t,10) = 11

? ? ? ?* lastIndexOf(t,60) = 55

? ? ? ?* indexOf(the,10) = 44

? ? ? ?* lastIndexOf(the,60) = 55

? ? ? ?*/

? }

}

?

1.7 修改字符串?

? ?因為String對象是不可改變的,所以當希望修改String對象時,必須將之復制到StringBuffer或StringBuilder對象中,或者使用String類提供的方法來構造字符串修改后的新副本。下面介紹這些方法中的幾個。?

1.7.1 substring()?

? ?使用substring方法可以提取子串。它有兩種形式,第一種形式如下:?

String substring(int startIndex)

?

? ?其中,startIndex指定了子串開始時的位置索引。這種形式返回調用字符串中從startIndex索引位置開始到字符串末尾的子串副本。? ? substring()方法的第二種形式允許同時指定子串的開始索引和結束索引:?

String substring(int startIndex,int endIndex)

?

? ?其中,startIndex指定開始索引,endIndex指定結束索引。返回的字符串包含從開始索引到結束索引的字符,但是不包含結束索引位置的字符。? ? 下面的程序使用substring()方法在一個字符串中使用一個字符串替換另一個子串的所有實例:?

//Substring replacement.

class StringReplace {

? public static void main(String[] args) {

? ? ? ?String org = "This is a test. This is, too.";

? ? ? ?String search = "is";

? ? ? ?String sub = "was";

? ? ? ?String result = "";

? ? ? ?int i;

? ? ? ?do {//replace all matching substrings

? ? ? ? ? ?System.out.println(org);

? ? ? ? ? ?i = org.indexOf(search);

? ? ? ? ? ?if (i != -1) {

? ? ? ? ? ? ? ?result = org.substring(0, i);

? ? ? ? ? ? ? ?result = result + sub;

? ? ? ? ? ? ? ?result = result + org.substring(i + search.length());

? ? ? ? ? ? ? ?org = result;

? ? ? ? ? ?}

? ? ? ?} while (i != -1);

? ? ? ?/**

? ? ? ? * This is a test. This is, too.

? ? ? ? * Thwas is a test. This is, too.

? ? ? ? * Thwas was a test. This is, too.

? ? ? ? * Thwas was a test. Thwas is, too.

? ? ? ? * Thwas was a test. Thwas was, too.

? ? ? ? */

? ?}

}

?

1.7.2 concat()?

? ?可以使用concat()方法來連接兩個字符串,如下所示:?

String concat(String str)

?

? ?該方法創建一個新對象,這個新對象包含調用字符串并將str的內容追加到結尾。concat()與"+"執行相同的功能。例如:?

String s1 = "one";

String s2 = s1.concat("two");

?

? ?將字符串"onetwo"存放發s2中。與下面語句產生的結果相同:?

String s1 = "one";

String s2 = s1 + "two";

?

1.7.3 replace()?

? ?replace()方法有兩種形式。第一種形式在調用字符串中使用一個字符代替另一個字符的所有實例,一般形式如下:?

String replace(char original,char replacement)

?

? ?其中,original指定將被替換的字符,replacement指定替換字符,結果字符串將被返回。例如:?

String s = "Hello".replace('1','w')

?

? ?將字符串"Hewwo"存放到s中。? ? replace()方法的第二種形式使用一個字符序列代替另一個字符序列,一般形式如下:?

String replace(CharSequence original,CharSequence replacement)

?

1.7.4 trim()?

? ?trim()方法返回調用字符串的副本,并移除開頭和結尾的所有空白字符,一般形式如下:?

String trim()

?

? ?下面是一個例子:?

String s = " Hello World ".trim();

?

? ?這條語句將字符創"Hello World"存放到s中。? ? 當處理用戶命令時,trim()方法特別有用。例如,下面的程序用戶輸入某個州的名稱,然后顯示該州的首府。該程序使用trim()方法移除用戶可能無意中輸入的開頭和結尾的所有空白字符。?

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

?

//Using trim() to process commands.

class UserTrim {

?public static void main(String[] args) throws IOException {

? ? ? //create a BufferedReader using System.in

? ? ? BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

? ? ? String str;

? ? ? System.out.println("Enter 'stop' to quit.");

? ? ? System.out.println("Enter State: ");

? ? ? do {

? ? ? ? ? str = br.readLine();

? ? ? ? ? str = str.trim();//remove whitespace

? ? ? ? ? if (str.equals("Illinois"))

? ? ? ? ? ? ? System.out.println("Capital is Springfield.");

? ? ? ? ? else if (str.equals("Missouri"))

? ? ? ? ? ? ? System.out.println("Capital is Jefferson City");

? ? ? ? ? else if (str.equals("California"))

? ? ? ? ? ? ? System.out.println("Capital is Sacramento.");

? ? ? ? ? //...

? ? ? } while (!str.equals("stop"));

? }

}

?

1.8 使用valueOf()轉換數據?

? ?valueOf()方法將數據從內部格式轉換成人類可以閱讀的形式。valueOf()是靜態方法,String針對所有Java內置類型對該方法進行了重載,從而可以將每種類型正確地轉換成字符串。Java還針對Object類型對valueOf()方法進行了重載,從而使您創建的所有類類型的對象都可作為valueOf()方法的參數(Object是所有類的超類)。下面是valueOf()方法的幾種形式:?

static String valueOf(double num)

static String valueOf(long num)

static String valueOf(Object ob)

static String valueOf(char chars[])

?

? ?前面討論過,當需要其他類型數據的字符串表示形式時會調用valueOf()方法,例如在連接操作期間。可以使用任何數據類型直接調用valueOf()方法,從而得到可讀的字符串表示形式。所有簡單類型都被轉換成它們通用的字符串表示形式。傳遞給valueOf()方法的所有對象都將返回調用對象的toString()方法的結果。實際上,可以直接調用toString()方法得到相同的結果。? ? 對于大部分數組,valueOf()方法會返回一個相當隱蔽的字符串,以表明這是某種類型的數組。然而,對于字符數組,會創建包含字符數組的String對象。還有一個特殊版本的valueOf()方法,允許指定字符數組的子集,一般形式為:?

static String valueOf(char chars[],int startIndex,int numChars)

?

? ?其中,chars是包含字符的數組,startIndex是期望子串在字符數組中何處開始的位置索引,numChars指定了子串的長度。?

1.9 改變字符串中字符的大小寫?

? ?方法toLowerCase()將字符串中的所有字符從大寫改變為小寫,方法toUpperCase()將字符串中的所有字符從小寫改為大寫。非字母字符不受影響。下面是這些方法的最簡單形式:?

String toLowerCase()

String toUpperCase()

?

? ?這些方法返回String對象,其中包含與調用字符串等價的大寫或小寫形式。對于這兩種情況下,都是由默認區域設置控制轉換。?

//Demonstrate toUpperCase() and toLowerCase().

class ChangeCase {

? public static void main(String[] args) {

? ? ? ?String s = "This is a test.";

? ? ? ?System.out.println("Original: " + s);

? ? ? ?String upper = s.toUpperCase();

? ? ? ?String lower = s.toLowerCase();

? ? ? ?System.out.println("UpperCase: " + upper);

? ? ? ?System.out.println("LowerCase: " + lower);

? ? ? ?/**

? ? ? ? * 輸出:

? ? ? ? * Original: This is a test.

? ? ? ? * UpperCase: THIS IS A TEST.

? ? ? ? * LowerCase: this is a test.

? ? ? ? */

? ?}

}

?

? ?另外一點:toLowerCase()和toUpperCase()方法的重載版本,還允許指定控制轉換的Locale對象。對于某些情況,指定區域非常重要,和有助于國際化應用程序?

1.10 連接字符串?

? ?JDK 8 為String類添加了一個新方法join(),用于連接兩個或更多個字符串,并使用分隔符分隔各個字符串,如空格或逗號。join()方法有兩種形式,第一種形式如下所示:?

static String join(CharSequence delim,CharSequence ...strs)

?

? ?其中,delim指定了分隔符,用于分隔strs指定的字符序列。因為String類實現了CharSequence接口,所以strs可以是一個字符串列表,下面的程序演示了這個版本的join()方法:?

//Demonstrate the join() method defined by String.

class StringJoinDemo {

? public static void main(String[] args) {

? ? ? ?String result = String.join(" ", "Alpha", "Beta", "Gamma");

? ? ? ?System.out.println(result);

? ? ? ?result = String.join(", ", "John", "ID#: 569",

? ? ? ? ? ? ? ?"E-mail: 123@qq.com");

? ? ? ?System.out.println(result);

? ? ? ?/**

? ? ? ? * 輸出:

? ? ? ? * Alpha Beta Gamma

? ? ? ? * John, ID#: 569, E-mail: 123@qq.com

? ? ? ? */

? ?}

}

?

? ?第一次調用join()時,在每個字符串之間插入了空格。在第二次調時,指定分隔符為一個逗號加一個空格,這表明分隔符并非只能是一個字符。? ? join()方法的第二種形式允許連接從實現了Iterable接口的對象獲取的一個字符串列表。?

1.11 其他String方法?

? ?除了前面討論的方法外,String類還提供了許多其他方法。如下表所示:?

?

?String類的其他方法

?

方法描述int codePointAt(int i)返回由i指定的位置的Unicode代碼點int codePointBefore(int i)返回由i指定的位置之前的Unicode代碼點int codePointCount(int start,int end)返回調用字符串處于start到end-1索引范圍內的代碼代碼點數boolean contains(CharSequence str)如果調用字符串包含由str指定的字符串,就返回true;否則返回falseboolean contentEquals(CharSequence str)如果調用字符串和str包含的字符串相同,就返回true;否則返回falseboolean contentEquals(StringBuffer str)如果字符串和str包含的字符串相同,就返回true;否則返回falsestatic String format(String fmtstr,Object …args)返回格式化的字符串,由fmtstr指定static String format(Locale loc,String fmtstr,Object …args)返回格式化的字符串,由fmtstr指定。格式化是由loc指定的區域控制的boolean isEmpty()如果調用字符串沒有任何字符并且長度為0,就返回trueboolean matches(String regExp)如果調用字符串和regExp傳遞的正則表達式匹配,就返回true;否則返回falseint offsetByCodePoints(int start,int num)返回字符串中超過start所指定開始索引num個代碼點的索引String replaceFirst(String regExp,String newStr)返回一個字符串,在返回的這個字符串中,使用newStr替換與regExp所指定正則表達式匹配的第一個子串String replaceAll(String regExp,String newStr)返回一個字符串,在返回的這個字符串中,使用newStr替換與regExp所指定正在表達式匹配的所有子串String[] split(String regExp)將調用字符串分解成幾個部分,并返回包含結果的數組。每一部分都由regExp傳遞的正則表達式進行界定String[] split(String regExp,int max)將調用字符串分解成幾個部分,并返回包含結果的數組。每一部分都由regExp傳遞的正則表達式進行界定。max指定分解的塊數。如果max是 負數,就完全分解調用字符串。否則,如果max包含非零值,那么結果數組中的最后一個元素是調用字符串的剩余部分。如果max是0,就完全分解調用字符串,但是不會包含后跟的空字符串CharSequence subSequence(int startIndex,int stopIndex)返回調用字符串的子串,從startIndex索引位置開始,并在stopIndex索引位置結束。該方法是CharSequence接口所需要的,String類實現了CharSequence接口

? ?注意這些方法中的多個都使用正則表達式進行工作。?

1.12 StringBuffer類?

? ?StringBuffer支持可修改的字符串。我們知道,String表示長度固定、不可修改的字符序列。與之相對應,StringBuffer表示可增長、可寫入的字符序列。StringBuffer允許在中間插入字符和子串,或者在末尾追加字符和子串。StringBuffer能夠自動增長,從而為這類添加操作準備空間,并且通常預先分配比實際需要更多的字符空間,以允許空間增長。?

1.12.1 StringBuffer類的構造函數?

? ?StringBuffer類定義了以下4個構造函數:?

StringBuffer()

StringBuffer(int size)

StringBuffer(String str)

StringBuffer(CharSequence chars)

?

? ?默認構造函數(沒有參數的那個)預留16個字符的空間,不需要再分配。第2個版本接收一個顯式設置緩沖區大小的整型參數。第3個版本接收一個設置StringBuffer對象初始化內容的String參數,并額外預留16個字符的空間,不需要再分配。如果沒有要求特定的緩沖區長度,StringBuffer會為16個附加字符分配空間,因為再次分配空間是很耗時的操作。此外,頻繁分配空間會產生內存碎片。通過為一部分額外字符分配空間,StringBuffer減少了再次分配空間的次數。第4個構造函數創建包含字符序列的對象,并額外預留16個字符的空間,包含的字符序列是由chars指定的。?

1.12.2 length() 與 capacity()?

? ?通過length()方法可以獲得StringBuffer對象的當前長度,而通過capacity()方法可以獲得已分配的容量。這兩個方法的一般形式如下:?

int length()

int capacity()

?

? ?下面是一個例子:?

//StringBuffer length vs capacity

class StringBufferDemo {

? public static void main(String[] args) {

? ? ? ?StringBuffer sb = new StringBuffer("Hello");

? ? ? ?System.out.println("buffer = "+sb);

? ? ? ?System.out.println("length = "+sb.length());

? ? ? ?System.out.println("capacity = "+sb.capacity());

? ? ? ?/**

? ? ? ? * 輸出:

? ? ? ? * buffer = Hello

? ? ? ? * length = 5

? ? ? ? * capacity = 21

? ? ? ? */

? ?}

}

?

? ?因為sb在創建時是使用字符串"Hello"初始化的,所以它的長度是5。因為自動添加了16個附加字符的空間,所以它的容量是21。?

1.12.3 ensureCapacity()?

? ?在創建了StringBuffer對象后,如果希望為特定數量的字符預先分配空間,可以使用ensureCapacity()方法設置緩沖區的大小。如果事先知道將要向StringBuffer對象追加大量的小字符串,這個方法是有用的。ensureCapacity()方法的一般形式為:?

void ensureCapacity(int minCapacity)

?

? ?其中,minCapacity指定了緩沖區的最小尺寸(處于效率方面的考慮,可能會分配比minCapacity更大的緩存區)。?

1.12.4 setLength()?

? ?可以使用setLength()方法設置StringBuffer中字符串的長度,一般形式為:?

void setLength(int len)

?

? ?其中,len指定字符串的長度,值必須非負。? ? 當增加字符串的大小時,會向末尾添加null字符。如果調用setLength()方法時,使用的值小于length()方法返回的當前值,那么超出新長度的字符將丟失。?

1.12.5 charAt() 與 setCharAt()?

? ?通過charAt()方法可以從StringBuffer獲取單個字符的值,使用setCharAt()方法可以設置StringBuffer對象中某個字符的值。這兩個方法的一般形式如下所示:?

char charAt(int where)

void setCharAt(int where,char ch)

?

? ?對于charAt()方法,where指定了將要獲取字符的索引。對于setCharAt()方法,where指定了將要設置字符的索引,ch指定了字符的新值。對于這兩個方法,where必須是非負的,并且不能超出字符串結尾的位置。下一節中的setCharAtDemo示例程序使用setLength()方法縮短了一個StringBuffer對象。? ? 下面的例子演示了charAt()和setCharAt()方法:?

//Demonstrate charAt() and setCharAt()

class setCharAtDemo {

? public static void main(String[] args) {

? ? ? StringBuffer sb = new StringBuffer("Hello");

? ? ? System.out.println("buffer before = "+sb);

? ? ? System.out.println("charAt(1) before = "+sb.charAt(1));

? ? ? sb.setCharAt(1,'i');

? ? ? System.out.println("setCharAt after = "+sb);

? ? ? sb.setLength(2);

? ? ? System.out.println("buffer after = "+sb);

? ? ? System.out.println("CharAt(1) after = "+sb.charAt(1));

? ? ? /**

? ? ? ?* 輸出:

? ? ? ?* buffer before = Hello

? ? ? ?* charAt(1) before = e

? ? ? ?* setCharAt after = Hillo

? ? ? ?* buffer after = Hi

? ? ? ?* CharAt(1) after = i

? ? ? ?*/

? }

}

?

1.12.6 getChars()?

? ?可以使用getChars()方法將StringBuffer對象的子串復制到數組中,一般形式為:?

void getChars(int sourceStart,int sourceEnd,char target[],int targetStart)

?

? ?其中,sourceStart指定了子串開始位置的索引,sourceEnd指定子串結束位置的最后一個位置的索引。這意味著子串將包含索引位置從sourceStart到sourceEnd-1之間的字符。接收字符的數組是由target指定的。targetStart指定了在target中開始復制子串的位置索引。用getChars()方法是一定要謹慎,確保target足以容納子串中的字符。?

1.12.7 append()?

? ?append()方法將各種其他類型數據的字符串表示形式連接到調用StringBuffer對象的末尾。該方法有一些重載版本,下面是其中的幾個:?

StringBuffer append(String str)

StringBuffer append(int num)

StringBuffer append(Object obj)

?

? ?通常調用String.valueOf()來獲取每個參數的字符串表示形式,結果將被添加到當前StringBuffer對象的末尾。緩沖區本身被各種版本的append()方法返回,從而可以將一系列調用連接起來,如下面的例子所示:?

//Demonstrate append().

class appendDemo {

? public static void main(String[] args) {

? ? ? ?String s;

? ? ? ?int a = 42;

? ? ? ?StringBuffer sb = new StringBuffer(40);

? ? ? ?s= sb.append("a = ").append(a).append("!").toString();

? ? ? ?System.out.println(s);

? ? ? ?/**

? ? ? ? * 輸出:

? ? ? ? * a = 42!

? ? ? ? */

? ?}

}

?

1.12.8 insert()?

? ?insert()方法將一個字符串插入到另一個字符串中。Java對該方法進行了重載,以接收所有基本類型以及String、Object和CharSequence類型的值。與append()類似,該方法獲取參數值的字符串表示形式,然后將字符串插入到調用StringBuffer對象中。下面是其中的幾種重載形式:?

StringBuffer insert(int index,String str)

StringBuffer insert(int index,char ch)

StringBuffer insert(int index,Object obj)

?

? ?其中,index指定了字符串插入到調用StringBuffer對象的位置索引。? ? 下面的示例程序將"like"插入到"I"和"Java"之間:?

//Demonstrate insert()

class insertDemo {

? public static void main(String[] args) {

? ? ? ?StringBuffer sb = new StringBuffer("I Java!");

? ? ? ?sb.insert(2,"like ");

? ? ? ?System.out.println(sb);

? ? ? ?/**

? ? ? ? * 輸出:

? ? ? ? * I like Java!

? ? ? ? */

? ?}

}

?

1.12.9 reverse()?

? ?可以使用reverse()方法顛倒StringBuffer對象中的字符,如下所示:?

StringBuffer reverse()

?

? ?該方法返回對象的反轉形式。下面的程序演示了reverse()方法:?

//Using reverse() to reverse a StringBuffer

class ReverseDemo {

? public static void main(String[] args) {

? ? ? ?StringBuffer s = new StringBuffer("abcdef");

? ? ? ?System.out.println(s);

? ? ? ?s.reverse();

? ? ? ?System.out.println(s);

? ? ? ?/**

? ? ? ? * 輸出:

? ? ? ? *abcdef

? ? ? ? *fedcba

? ? ? ? */

? ?}

}

?

1.12.10 delete() 與 deleteCharAt()?

? ?使用delete()和deleteCharAt()方法可以刪除StringBuffer對象中的字符。寫方法如下所示:?

StringBuffer delete(int startIndex,int endIndex)

StringBuffer deleteCharAt(int loc)

?

? ?delete()方法從調用對象刪除一連串字符。其中,startIndex指定第一個刪除字符的位置索引,endIndex指定要刪除的最后一個字符之后的下一個字符的位置索引。因此,結果是刪除索引位置從startIndex到endIndex-1之間的子串。刪除字符串后的StringBuffer對象作為結果返回。? ? deleteCharAt()方法刪除由loc指定的索引位置的字符,返回刪除字符后的StringBuffer對象。? ? 下面是演示delete()和deleteCharAt()方法的程序:?

//Demonstrate delete() and deleteCharAt()

class deleteDemo {

? public static void main(String[] args) {

? ? ? ?StringBuffer sb = new StringBuffer("This is a test.");

? ? ? ?sb.delete(4,7);

? ? ? ?System.out.println("After delete: "+sb);

? ? ? ?sb.deleteCharAt(0);

? ? ? ?System.out.println("After deleteCharAt: "+sb);

? ? ? ?/**

? ? ? ? * 輸出:

? ? ? ? * After delete: This a test.

? ? ? ? * After deleteCharAt: his a test.

? ? ? ? */

? ?}

}

?

1.12.11 replace()?

? ?通過調用replace()方法可以使用一個字符集替換StringBuffer對象中的另一個字符集。該方法的簽名如下所示:?

StringBuffer replace(int startIndex,int endIndex,String str)

?

? ?索引startIndex和endIndex指定了將被替換的子串,因此將替換startIndex和endIndex-1索引位置之間的子串。替換字符串是由str傳入的。替換后的StringBuffer對象作為結果返回。? ? 下面的程序演示了replace()方法:?

//Demonstrate replace()

class replaceDemo {

? public static void main(String[] args) {

? ? ? ?StringBuffer sb = new StringBuffer("This is a test.");

? ? ? ?sb.replace(5,7,"was");

? ? ? ?System.out.println("After replace: "+sb);

? ? ? ?/**

? ? ? ? * 輸出:

? ? ? ? * After replace: This was a test.

? ? ? ? */

? ?}

}

?

1.12.12 substring()?

? ?通過調用substring()方法可以獲得StringBuffer對象的一部分。該方法有以下兩種重載形式:?

String substring(int startIndex)

String substring(int startIndex,int endIndex)

?

? ?第一種形式返回從索引位置startIndex開始到調用StringBuffer對象末尾之間的子串,第二種形式返回startIndex和endIndex-1索引位置之間的子串。這些方法的工作方式與前面介紹的String類的對應方法類似。?

1.12.13 其他StringBuffer方法?

? ?除了剛才介紹的方法外,StringBuffer還提供了其他一些方法,如下表所示:?

?

?StringBuffer的其他一些方法

?

方法描述StringBuffer appendCodePoint(int ch)在調用對象的末尾添加一個Unicode代碼點,返回對調用對象的引用int codePointAt(int i)返回由i指定的位置的Unicode代碼點int codePointBefore(int i)返回由i指定的位置之前位置的Unicode代碼點int codePointCount(int start,int end)返回調用對象在位置start和end-1之間代碼點的數量int indexOf(String str)查找str在調用StringBuffer對象中的第一次出現時的位置索引,并返回索引。如果沒有找到,就返回-1int indexOf(String str,int startIndex)從startIndex位置索引開始查找查找str在StringBuffer對象中第一次出現時的位置索引,并返回索引。如果沒有找到,就返回-1int lastIndexOf(String str)查找str在調用StringBuffer對象中最后一次出現時的位置索引,并返回該索引。如果沒有找到,就返回-1int lastIndexOf(String str,int startIndex)從位置索引startIndex開始查找str在StringBuffer對象中最后一次出現時的位置索引,并返回該索引。如果沒有找到,就返回-1int offsetByCodePoints(int start,int num)返回調用字符串中超過start所指定索引位置num個代碼點的索引CharSequence subSequence(int startIndex,int stopIndex)返回調用字符串的一個子串,從位置索引startIndex開始,到stopIndex位置索引結束。這個方法是CharSequence接口所需要的,StringBuffer實現了該接口void trimToSize()要求為調用對象減小字符緩存對的大小,以更適合當前內容

? ?下面的程序演示了indexOf()方法和lastIndexOf()方法:?

//下面的程序演示了indexOf()方法和lastIndexOf()方法:

class IndexOfDemo {

? public static void main(String[] args) {

? ? ? ?StringBuffer sb = new StringBuffer("one two one");

? ? ? ?int i;

? ? ? ?i = sb.indexOf("one");

? ? ? ?System.out.println("First index: "+i);

? ? ? ?i = sb.lastIndexOf("one");

? ? ? ?System.out.println("Last index: "+i);

? ? ? ?/**

? ? ? ? * 輸出:

? ? ? ? * First index: 0

? ? ? ? * Last index: 8

? ? ? ? */

? ?}

}

?

1.13 StringBuilder類?

? ?StringBuilder類是由JDK5引入的,以增強Java的字符串處理能力。StringBuilder與StringBuffer類似,只有一個重要的區別:StringBuilder不是同步的,這意味著它不是線程安全的。StringBuilder的優勢在于能得到更高的性能。但是,如果可以修改的字符串將被多個線程修改,并且沒有其他同步措施的話,就必須使用StringBuffer,而不能使用StringBuilder。

總結

以上是生活随笔為你收集整理的[转载] Java中的字符串处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品久久久久久久99 | 亚洲午夜久久久久久久久电影网 | 亚洲免费av观看 | 在线视频 影院 | 欧美巨大 | 99久久精品免费看国产免费软件 | 精品在线视频播放 | 日日操夜 | 97人人看| 日韩欧美一区二区三区在线观看 | 国产精品乱码久久 | 日本丶国产丶欧美色综合 | 丁香网五月天 | 91精品国产欧美一区二区 | 超碰公开在线 | 中文字幕在线播出 | 久草免费新视频 | 99精品视频在线播放免费 | 国产不卡视频在线播放 | 韩日av在线 | 欧美黑人性猛交 | 欧美精品久久久 | 国产自在线 | 日本精品视频一区 | 一级黄色片在线 | 成人小视频免费在线观看 | 韩国视频一区二区三区 | 青青草国产精品视频 | 国产日产欧美在线观看 | 久久国产热视频 | 亚洲精品视频在线观看网站 | 丁香亚洲 | 97超碰色偷偷 | 亚洲激情中文 | 国产成人久久77777精品 | 亚洲污视频 | 在线观看理论 | 日韩av电影网站在线观看 | 超碰97人人射妻 | 一区二区 不卡 | 特级片免费看 | 超碰伊人网| 久久精品一区二区三区国产主播 | 91av短视频 | 亚洲人人爱 | 亚洲国产日韩欧美 | 久久免费视频1 | 中文av免费 | 天天射天天干 | 欧美日韩国产精品一区二区亚洲 | 久久久综合香蕉尹人综合网 | 四川妇女搡bbbb搡bbbb搡 | 免费看一级特黄a大片 | 88av视频 | 中文字幕一区二区三区乱码不卡 | 久久国产精品久久w女人spa | 婷婷丁香久久五月婷婷 | 久久精品xxx| 国产一区不卡在线 | 欧美激情视频在线免费观看 | 九九视频在线观看视频6 | 久久综合九色99 | 欧美特一级片 | 久久精品精品电影网 | 日韩欧美在线视频一区二区三区 | 国产高h视频| 丁香久久激情 | 黄色网www | 韩国精品一区二区三区六区色诱 | av一区在线 | 日本三级全黄少妇三2023 | 丁香激情综合 | 一区二区男女 | 久久国产精品免费一区二区三区 | 在线观看www视频 | 日韩二区三区在线观看 | 国产又粗又猛又黄视频 | 日韩中文在线字幕 | 中文字幕久久精品 | 国产亚洲精品电影 | 免费a级观看 | 久久中文精品视频 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 国产三级视频 | 在线蜜桃视频 | 精品免费久久久久 | 美女免费视频一区二区 | 欧美伊人网 | 91丨九色丨91啦蝌蚪老版 | 精品久久久久国产免费第一页 | 少妇精品久久久一区二区免费 | 久久国产精品99久久久久 | 超碰人在线 | 久久这里只有精品视频99 | 亚洲精品videossex少妇 | 亚洲综合色站 | 精品免费视频. | 免费av网站在线 | 日韩在线二区 | 久久精品国产亚洲aⅴ | 免费观看完整版无人区 | 在线久热| 黄网站免费久久 | 91免费观看 | 国产色黄网站 | 激情婷婷网| 女人魂免费观看 | 日韩大陆欧美高清视频区 | 中文字幕视频网 | 97视频在线看 | 精品国产乱子伦一区二区 | 亚洲精品99久久久久久 | 日韩成人一级大片 | 久久天堂精品视频 | 国产精品中文在线 | 三级av免费看 | 毛片一二区 | 欧美视频一区二 | 亚洲国产片 | av中文字幕网站 | 日本性生活免费看 | 青青看片 | 五月天堂网 | 欧美久久久久久久久久久久久 | 欧美色图亚洲图片 | 日躁夜躁狠狠躁2001 | 色噜噜狠狠色综合中国 | 亚洲日本在线视频观看 | 亚洲做受高潮欧美裸体 | 久久久成人精品 | 日本成人免费在线观看 | 国产高清av免费在线观看 | 亚洲精品福利视频 | 亚洲美女视频在线观看 | 正在播放国产一区 | 国产又粗又猛又黄又爽 | av中文在线影视 | 亚洲高清精品在线 | 午夜精品一区二区三区免费 | 日韩中文字| 久久麻豆精品 | 91香蕉视频 | 337p日本欧洲亚洲大胆裸体艺术 | 日韩a级黄色片 | 久久99在线视频 | 九九免费在线观看视频 | 久久视频网 | 国产精品视频免费 | 欧美精品久久久久久久 | 五月婷婷免费 | av三级在线播放 | 中文字幕国产亚洲 | 9在线观看免费高清完整版在线观看明 | 久久久久亚洲精品成人网小说 | 蜜臀久久99精品久久久久久网站 | 91亚洲精品乱码久久久久久蜜桃 | 西西444www大胆无视频 | 国产一区视频在线 | 天天曰天天射 | 中文字幕精品一区 | 在线观看免费版高清版 | 在线视频一二区 | 天天色天天爱天天射综合 | 国产一性一爱一乱一交 | 黄色国产成人 | 日韩免费不卡av | 黄色网www | 日本公妇在线观看 | 奇米影视777四色米奇影院 | 日韩高清黄色 | 欧美亚洲成人xxx | 久久人人看 | 国产91九色视频 | 成人午夜电影网站 | 国产在线一区二区 | 精品一区av | 在线观看视频国产 | 成人av免费在线观看 | 人人干天天射 | 夜夜澡人模人人添人人看 | 亚洲一级二级三级 | 天天操天天射天天插 | 色网站在线看 | 丁香花中文字幕 | 免费在线观看日韩 | 国产999精品久久久 免费a网站 | 91在线观看欧美日韩 | 999视频在线观看 | 久久激五月天综合精品 | 国产青春久久久国产毛片 | 不卡的一区二区三区 | 亚洲欧洲久久久 | 久久久穴 | 五月天丁香综合 | 黄色片网站 | 成人小视频在线播放 | 亚洲成人动漫在线观看 | 免费在线观看亚洲视频 | 国产一区二区三区高清播放 | 欧美黑人猛交 | 国产在线播放观看 | 国产夫妻性生活自拍 | 青青草国产免费 | 欧美极品少妇xbxb性爽爽视频 | 日韩欧美精选 | 人人爽人人爽人人爽学生一级 | 精品视频资源站 | 香蕉网在线播放 | 色婷婷97| 深爱激情五月网 | 中文字幕高清视频 | 成人天堂网 | 91传媒在线 | 久久综合婷婷国产二区高清 | 青青看片 | 成人影片免费 | 国产精品欧美久久久久三级 | 久久久久久97三级 | 亚洲综合欧美激情 | 在线观看一级视频 | 久草香蕉在线视频 | 岛国精品一区二区 | 97干com| 三级黄色片子 | 国产精品久久久久久久免费大片 | 亚州视频在线 | 成人免费视频网站在线观看 | 婷婷伊人网 | 成人蜜桃| 波多野结衣亚洲一区二区 | 日韩av男人的天堂 | 国产亚州精品视频 | 成人一区二区在线 | 最近中文字幕国语免费av | 亚洲视频免费在线 | 五月婷婷精品 | 亚洲三级黄 | 亚洲精品美女在线观看播放 | 免费在线观看黄 | 亚洲午夜在线视频 | 国产成人在线观看 | 国产大陆亚洲精品国产 | 日韩精品一区二区在线观看视频 | 精品国产免费一区二区三区五区 | 99精品国产在热久久下载 | 五月开心激情 | 日本中文字幕影院 | 黄色在线观看免费 | 97超碰中文字幕 | 99久久99视频只有精品 | 国产成人精品午夜在线播放 | 超碰成人免费电影 | 久久精品国产第一区二区三区 | 亚洲美女视频网 | 免费精品人在线二线三线 | 日韩一级黄色av | av在线a| 免费成人黄色片 | 九九久久免费 | 免费黄色av电影 | 911久久香蕉国产线看观看 | 91在线日韩 | 精品欧美在线视频 | 高清视频一区二区三区 | 日韩免费视频一区二区 | 婷婷福利影院 | 97在线观看免费观看高清 | 国产片免费在线观看视频 | 97天天综合网 | 国产成人三级一区二区在线观看一 | 午夜精品一二三区 | 欧美尹人 | 婷婷六月久久 | 五月激情电影 | 在线99热 | 久久久网站 | www天天干| 91精品国产乱码 | 91精品国产91p65| 中文字幕色综合网 | 久久小视频 | 日韩一级精品 | 在线观看中文字幕亚洲 | 日日躁夜夜躁xxxxaaaa | 日韩精品一区二区三区外面 | 少妇bbw搡bbbb搡bbb | 国产精品久久久久久久久久久杏吧 | 亚洲精品高清在线观看 | 91大神dom调教在线观看 | 国产精品入口66mio女同 | 黄色a三级 | 99爱这里只有精品 | 日韩欧美综合在线视频 | 久久综合电影 | 99这里只有久久精品视频 | 国产精品久久久久影院 | 激情网五月天 | 久久人视频 | 色综合综合 | 久草青青在线观看 | 成人羞羞免费 | av成人在线电影 | 亚洲一区日韩 | 狠狠狠狠狠狠干 | 亚洲视频在线观看免费 | 久久久99久久 | 色资源在线观看 | 日日爽日日操 | 国产一区二区视频在线播放 | 97超碰人人模人人人爽人人爱 | 日韩伦理一区二区三区av在线 | www.色就是色 | 五月婷婷.com | 爱色婷婷 | 国产亚洲在线观看 | 日日爱影视 | 国产精品视频免费观看 | 在线精品播放 | 国产成人亚洲在线观看 | 一区二三国产 | 正在播放日韩 | 五月在线视频 | 欧美日韩一区二区三区视频 | 九九有精品 | 99热手机在线 | 99视频免费播放 | 精品黄色片 | 一本大道久久精品懂色aⅴ 五月婷社区 | 国产成人亚洲在线观看 | 天天干夜夜操视频 | 精品在线二区 | 久久综合久久综合这里只有精品 | 麻豆免费观看视频 | 天天亚洲 | 日韩久久一区 | 天堂v中文 | 国产精品岛国久久久久久久久红粉 | 夜夜躁日日躁狠狠久久88av | 亚洲国产成人在线播放 | 中文在线a天堂 | 国产麻豆视频 | 欧美a在线看 | 日韩欧美在线视频一区二区三区 | 国产色资源 | 久久久精品99 | 国产精品 亚洲精品 | 超碰人人射 | 夜夜躁日日躁狠狠躁 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 亚洲精品午夜国产va久久成人 | 操处女逼 | 四虎国产 | 91精品成人 | 91香蕉视频黄 | 久久综合九色 | 91亚色在线观看 | 婷婷六月天综合 | 在线激情小视频 | 国产美女被啪进深处喷白浆视频 | 欧美日韩久久一区 | 91精品在线观看入口 | 国产成人61精品免费看片 | 国产精品久久久久aaaa九色 | 中文在线天堂资源 | 欧美精品一区在线 | 亚洲 欧美 日韩 综合 | 国产精品入口传媒 | 一本一道久久a久久精品蜜桃 | 久久婷婷国产色一区二区三区 | 久久免费美女视频 | 国产高清第一页 | 99久久精品免费看国产 | 国产精品嫩草影院123 | 免费网站污 | 五月婷婷播播 | 国产精品夜夜夜一区二区三区尤 | 欧美成人影音 | 在线免费观看国产 | 91精品国自产拍天天拍 | 成年美女黄网站色大片免费看 | 久久久久久久网 | 啪啪肉肉污av国网站 | 久久午夜网 | 精品国产一区二区久久 | 狠狠色丁香久久综合网 | 亚州国产精品久久久 | 午夜精品久久久久久久99热影院 | 夜夜高潮夜夜爽国产伦精品 | 精品视频中文字幕 | 亚洲综合在线五月 | 在线观看爱爱视频 | 国产欧美最新羞羞视频在线观看 | 日韩午夜av电影 | 国产日产精品一区二区三区四区 | 美女免费黄视频网站 | 嫩草av影院 | 九九久久国产 | 国产一级片久久 | 午夜三级毛片 | 成人亚洲免费 | 久久久精品在线观看 | 国内精品久久久精品电影院 | 亚洲国产中文在线 | 1024手机看片国产 | 国产精品久久久久影院 | 99久免费精品视频在线观看 | 激情六月婷婷久久 | 激情视频网页 | 最新av电影网站 | 狠狠的操 | 欧美看片| 日韩在线观看一区二区 | 最近中文字幕在线播放 | 亚洲天堂网在线视频观看 | 毛片网站免费 | 成x99人av在线www | 青青草国产精品视频 | 亚洲电影黄色 | 娇妻呻吟一区二区三区 | 欧美性直播 | 欧美激情精品久久久 | 久久视频精品在线观看 | 久草精品在线 | 激情导航| 粉嫩av一区二区三区入口 | 亚洲精品玖玖玖av在线看 | 精品久久一区二区 | av天天澡天天爽天天av | 亚洲精品在线电影 | 岛国av在线免费 | 久久96国产精品久久99软件 | www一起操 | 在线91观看 | 国产馆在线播放 | 久久精品资源 | 中文字幕在线观看完整版 | 精品一区二区三区久久 | 超碰97中文| 五月婷婷影院 | 欧美激情精品一区 | 亚洲一级片在线观看 | 亚洲va天堂va欧美ⅴa在线 | 久久久久久国产精品免费 | 国产91在线免费视频 | 最近2019年日本中文免费字幕 | av电影久久 | 日韩在线观看免费 | 久久色在线观看 | 欧美黄色成人 | 国内久久| 97视频免费看 | 中文字幕高清免费日韩视频在线 | 在线观看国产91 | 91成人天堂久久成人 | 欧美视频不卡 | 国产视频久久 | 99精品在线观看 | 国产精品美女999 | 亚洲资源在线网 | 中文字幕在线播放日韩 | 中文字幕精品久久 | 91久久爱热色涩涩 | www最近高清中文国语在线观看 | 成人免费看片网址 | 国产女v资源在线观看 | 三级av免费观看 | 天天色综合三 | 日韩中文字幕在线不卡 | 久久成人综合视频 | 国产精品福利无圣光在线一区 | 国产精品99蜜臀久久不卡二区 | 欧美日韩后 | 午夜在线免费观看视频 | 黄色影院在线播放 | 黄av在线| 一级片免费观看视频 | 久久久久久久久久伊人 | 一区二区三区免费在线播放 | 免费精品| 网站在线观看你们懂的 | 激情黄色av | 国产96精品 | 欧美伦理一区二区 | 国产欧美日韩精品一区二区免费 | 一级黄色在线视频 | 三级黄色a | 欧美极品一区二区三区 | 欧美国产日韩一区二区三区 | 中文字幕欲求不满 | 日韩中文字幕一区 | 黄网站免费看 | 久草在线最新免费 | 2019中文字幕网站 | 免费看的黄色 | 亚洲激情av| 亚洲在线激情 | 亚洲人人精品 | 国产成人精品午夜在线播放 | 国内视频 | 亚洲精品视频网 | 粉嫩高清一区二区三区 | 成人网在线免费视频 | 国产精品一区二区吃奶在线观看 | 日韩欧美电影在线 | 亚洲一区二区三区四区精品 | 婷婷久操 | 亚洲综合网 | av一本久道久久波多野结衣 | 91桃色在线观看视频 | 五月天综合色激情 | 久久久www成人免费毛片麻豆 | 日本在线观看视频一区 | 精品一区二区久久久久久久网站 | 欧美男同视频网站 | 黄网站app在线观看免费视频 | 国产亚洲视频在线 | 国产精品色视频 | 91久久丝袜国产露脸动漫 | 天天·日日日干 | 成人亚洲免费 | 久久五月婷婷综合 | 99热 精品在线 | 韩国精品在线观看 | 国产精品九九久久99视频 | 精品久久免费看 | 成人中文字幕av | 国产精品大片在线观看 | 婷婷色5月 | 精品国产色 | 久草网在线视频 | 99久国产| 色福利网 | 成人在线观看日韩 | 天堂av在线网址 | 日本在线观看视频一区 | 久久欧洲视频 | 久久精品99国产 | 成人一级视频在线观看 | 久久亚洲福利视频 | 国产麻豆精品久久 | 国产最新在线 | 国产手机视频在线播放 | 国产精品久久久久久久久搜平片 | 国产精品99久久久久久久久 | 日日夜夜网站 | 日韩美av在线| 久草在线最新 | av在线直接看 | 日韩极品视频在线观看 | 国产成人三级在线播放 | 久久亚洲在线 | 国产麻豆电影 | 香蕉蜜桃视频 | 国产在线一线 | 亚洲视频在线观看 | av在线免费在线观看 | av看片在线 | 久久精品99久久久久久2456 | 色综合天天综合在线视频 | 日韩大片免费在线观看 | 91麻豆.com| 免费在线观看一区二区三区 | 91av影视 | 欧美精品久久人人躁人人爽 | 亚洲成av人片在线观看香蕉 | 日韩网站在线播放 | 免费av在线播放 | 98涩涩国产露脸精品国产网 | 欧美在线资源 | av午夜电影 | 香蕉视频18 | 亚洲黄色免费在线 | 婷婷综合久久 | 在线观看日韩国产 | 成年人毛片在线观看 | 夜夜躁狠狠躁日日躁视频黑人 | 国产色爽 | 中国一级片在线播放 | 首页中文字幕 | 97小视频| 久久污视频 | www视频在线免费观看 | 国产欧美最新羞羞视频在线观看 | 久久久国产网站 | 国产999精品久久久久久麻豆 | 天天曰天天射 | 国产永久免费观看 | 国产传媒中文字幕 | 国产私拍在线 | 天天爽网站 | 深爱婷婷网 | 亚洲精品久久视频 | 亚洲精品成人免费 | 射久久 | 久久综合影院 | 99tvdz@gmail.com | 国产v在线观看 | 天天天天射| 黄色一级免费 | 91观看视频 | 欧美成人性战久久 | av激情五月 | 国产精品破处视频 | av电影av在线 | 日韩精品资源 | 精品一区二区在线免费观看 | 91精品国产99久久久久久久 | 欧美日韩高清一区二区 国产亚洲免费看 | 欧洲一区二区三区精品 | 六月丁香社区 | 亚洲日日日 | 中文字幕免费国产精品 | 国产色啪 | av成人在线电影 | 日韩精品一区二区免费视频 | 国产九九精品视频 | 国产尤物在线视频 | 波多野结衣一区二区三区中文字幕 | 亚洲 av网站| 天天要夜夜操 | 国产精品久久视频 | 成人手机在线视频 | 日本中文一区二区 | 免费av福利 | 色综合久久精品 | 九九色视频 | 久久久精品亚洲 | 激情综合色图 | 区一区二区三在线观看 | 一区二区三区日韩在线观看 | 人人干人人超 | 亚洲美女在线一区 | 国产午夜激情视频 | 综合中文字幕 | 91欧美日韩国产 | 99久久久久久| 国产在线色视频 | 99r在线播放| 日日干天天射 | 欧美肥妇free | 人人操日日干 | 天天av资源| 亚洲欧美在线综合 | 国产网红在线观看 | 亚洲精品自拍视频在线观看 | 精品中文字幕在线 | 亚洲精品av在线 | 成年美女黄网站色大片免费看 | 毛片久久久 | 91精品导航 | 99精品在线免费视频 | 精品国产一二三四区 | 中文在线字幕免费观看 | 少妇性色午夜淫片aaaze | 黄色国产高清 | 国产精品高清在线 | 九九热免费精品视频 | 人人天天夜夜 | 国产免费观看av | 成人app在线播放 | 亚洲va欧洲va国产va不卡 | 日本中文字幕在线观看 | 国产成人精品一区二区三区免费 | 伊人久久一区 | 97人人超 | 五月宗合网 | 久久国产精品偷 | 日本中文字幕一二区观 | 一二三区视频在线 | 欧美在线日韩在线 | 久久久国产精品一区二区三区 | 国产在线观看你懂得 | 九九综合久久 | av激情五月 | 人人爽人人爽人人爽人人爽 | 91福利在线观看 | 少妇按摩av | 91成人精品观看 | 中文字幕黄色 | 久久av免费观看 | 精品国产一区二区三区久久影院 | 美女黄视频免费 | 亚洲黄色三级 | 久久精彩 | 狠狠色丁香婷婷综合欧美 | 9在线观看免费高清完整版 玖玖爱免费视频 | 四虎成人精品永久免费av九九 | 久久婷婷一区二区三区 | 六月丁香在线视频 | 粉嫩高清一区二区三区 | 亚洲精品av在线 | 亚洲电影黄色 | 丁香网婷婷 | 婷婷网址| 一区二区精品在线 | 久久免费久久 | 日本夜夜草视频网站 | 久久久私人影院 | 4p变态网欧美系列 | 国产成人一区二区在线观看 | 欧美黑人猛交 | 亚洲欧美日韩精品久久奇米一区 | 九九在线视频免费观看 | 亚洲国产免费 | 国产网站色| 免费看成年人 | 日韩色区| 国产96在线观看 | 国产亚洲精品久久久久动 | 五月婷婷综合在线观看 | av黄色影院 | 在线看黄色的网站 | 99视频这里有精品 | 亚洲女同ⅹxx女同tv | 香蕉久草在线 | 在线亚洲人成电影网站色www | 精品一二三区 | 久久影院中文字幕 | 亚洲精品免费在线观看视频 | 国产二区电影 | 成人av播放| 国产精品久久久久久久免费 | 狠狠色丁香婷婷综合久久片 | 精品久久久久国产免费第一页 | 开心激情五月网 | 69国产在线观看 | 91亚洲激情 | 成人黄色片免费 | 探花视频免费观看 | 日韩欧美一区二区三区免费观看 | 波多野结依在线观看 | 日韩久久久久久久久 | 亚洲欧美日本一区二区三区 | 日日干影院 | 黄色免费高清视频 | 99热这里是精品 | 99免费在线 | 草久久影院| 久久久久久久久久久免费视频 | 久久久午夜精品理论片中文字幕 | 欧美一区二区精美视频 | 最新中文字幕在线播放 | 青青河边草免费视频 | 97在线观看免费高清 | 在线观看国产日韩欧美 | 一区二区在线不卡 | 亚洲人片在线观看 | 亚洲粉嫩av| 免费男女羞羞的视频网站中文字幕 | 日韩在线视频免费看 | www.eeuss影院av撸 | 久久精品国产成人精品 | 国产无遮挡又黄又爽在线观看 | 最新国产在线观看 | 999视频精品 | 一级片色播影院 | 一区二区三区久久 | 免费看日韩 | 国产一区欧美在线 | 精品欧美一区二区精品久久 | 亚洲国产精品久久久久婷婷884 | 在线91观看 | av超碰在线| 黄a在线 | 日韩二区在线播放 | 国产精品国产亚洲精品看不卡 | 一区二区毛片 | 久久一区二区三区超碰国产精品 | 欧美一级高清片 | 天天操导航 | 精品自拍sae8—视频 | 久久手机看片 | 91最新在线视频 | 激情视频免费观看 | 久久久99精品免费观看 | 成人97视频一区二区 | 成人午夜性影院 | 亚洲视频999 | 永久精品视频 | 日韩精品在线免费观看 | 色综合久久精品 | 在线观看黄色免费视频 | 久久国语露脸国产精品电影 | 在线观看国产v片 | 在线黄色观看 | 91爱爱免费观看 | 人人搞人人搞 | 日韩一区二区免费视频 | 最新精品视频在线 | 99视频在线精品免费观看2 | 国产69精品久久久久久 | 在线观看免费一级片 | 久草在线视频国产 | 成人a免费视频 | 91在线免费视频 | 久久久免费观看完整版 | 一区二区视频在线播放 | 四虎影视www| 97国产人人 | 在线黄色免费av | 99亚洲精品 | 一区二区中文字幕在线 | 一区二区三区国产欧美 | 国产成人免费在线观看 | 久久99精品久久久久久久久久久久 | 国产精品一区二区久久久 | 亚洲va欧洲va国产va不卡 | 久草亚洲视频 | 人人插人人费 | 国产精品一级在线 | 中文在线亚洲 | 免费日韩电影 | 97成人精品视频在线观看 | 在线免费观看涩涩 | 久久久久久中文字幕 | 国产h在线观看 | 久久久视频在线 | 国产女人免费看a级丨片 | 中文字幕在线免费观看 | 久久久久久国产精品免费 | 人人看人人 | av免费在线播放 | 婷婷伊人五月 | 91av欧美| 亚洲国产精品人久久电影 | 在线免费观看不卡av | 婷婷精品在线视频 | 久久视频网址 | 91精品国产综合久久久久久久 | 色婷婷狠| 夜夜操综合网 | 久草在线91 | 深爱开心激情网 | 亚洲精品国内 | 麻豆一精品传二传媒短视频 | 成人av在线电影 | 日日夜夜91| 久久久久福利视频 | 国产精品一区二区白浆 | 欧洲精品码一区二区三区免费看 | 亚洲精品视频在线观看免费 | 7777精品伊人久久久大香线蕉 | 亚洲国产三级在线 | 这里有精品在线视频 | 免费电影一区二区三区 | 国产中年夫妇高潮精品视频 | 精品福利片 | 草樱av| 99久久精品无码一区二区毛片 | 国产一区二区在线观看视频 | 久久久高清免费视频 | 久9在线 | 久久精品激情 | 激情视频综合网 | 婷婷色综合色 | 国产一级做a | 久久综合亚洲鲁鲁五月久久 | 免费视频a | 亚洲欧美精品在线 | 中文字幕欧美日韩va免费视频 | 99视频精品视频高清免费 | 亚洲闷骚少妇在线观看网站 | 国产玖玖在线 | 午夜在线免费观看视频 | 精品视频免费观看 | 久久免费在线视频 | 毛片基地黄久久久久久天堂 | 色噜噜噜 | 91精品秘密在线观看 | 日日成人网 | 欧美精品日韩 | 日韩在线色视频 | 成人动漫一区二区三区 | 超碰在线最新网址 | 国产色网 | 在线国产视频 | 午夜体验区 | 一区二区三区 亚洲 | 中文字幕第一页在线 | 国产又粗又猛又色又黄视频 | 日日躁你夜夜躁你av蜜 | 91中文字幕网 | 日本在线观看一区二区三区 | 午夜性福利 | 超碰在线观看99 | 色婷婷综合久久久久 | 女人高潮一级片 | 国产精品美女免费看 | 一性一交视频 | 婷婷精品在线 | 五月天免费网站 | 1024手机看片国产 | 日韩高清不卡在线 | 欧美一级在线 | 国产这里只有精品 | 97伊人网| 国产不卡免费 | 久艹视频在线观看 | 99精品视频在线播放观看 | 国产男女免费完整视频 | 中文字幕一区二区三区乱码在线 | 精品国内自产拍在线观看视频 | 国产精品69av | 狠狠干我 | 日韩国产欧美视频 | 国产涩图 | 免费看片网站91 | 在线观看中文字幕第一页 | 国产丝袜一区二区三区 | 美女中文字幕 | 91成年人在线观看 | 一级免费黄视频 | 91网站免费观看 | 久久黄色影院 | 99久久久久| 一级特黄aaa大片在线观看 | 国产日本在线观看 | 丁香五婷 | 亚洲欧美日韩精品久久奇米一区 | 在线观看的a站 | 日韩av资源站 | 视频91| 成人久久国产 | 黄色a一级片 | 国产一区二区在线观看视频 | 丝袜美女视频网站 | 日韩国产欧美在线播放 | 久久精品99国产精品亚洲最刺激 | 久久免费视频这里只有精品 | 精品高清视频 | 日本一区二区三区视频在线播放 | 日韩一区二区三区高清免费看看 | 亚洲视频一 | 免费a网址 | 亚洲综合五月 | 欧美一级艳片视频免费观看 | 久久久久久高潮国产精品视 | 91色九色 | 在线成人免费电影 | 中文字幕在线播放一区二区 | 天天噜天天色 | 中文字幕一区二区三区四区视频 | 国产精品久久片 | 免费日韩 精品中文字幕视频在线 | 久草在线99 | 玖玖玖影院 | 97精品国产 | 免费一级毛毛片 | 亚洲伊人av | 在线一区观看 | 婷婷色影院 | 国产不卡精品视频 | 欧美性猛片 | 99视频免费观看 | 伊人五月婷 | 免费在线观看中文字幕 | 国产欧美综合视频 | 99久久999久久久精玫瑰 | 日韩一区二区三区免费视频 | 97视频总站 | 在线黄色免费 | 精品一区二区三区久久 | 色综合天天视频在线观看 | 天天操天天操天天操天天 | 国内精品久久影院 | 亚洲精品mv在线观看 | 五月婷婷综合在线 | 精品a在线| 亚洲精品字幕在线观看 | 91激情 | 激情丁香5月 | 国内免费久久久久久久久久久 | 久久久久在线视频 | 天天爱天天射天天干天天 | 在线中文字幕电影 | 久久午夜影院 | 色婷婷www | 日韩av专区| 综合久久久久 | 国产成人精品不卡 | 日韩精品一区二区三区在线视频 | 狠狠干夜夜操天天爽 | 在线观看电影av | 亚洲综合成人在线 | 国产小视频免费观看 | 国产高清成人av | 久草视频免费在线观看 | 射射射av | 不卡的av在线 | 免费看黄20分钟 | 久久国产露脸精品国产 | 亚洲影音先锋 | 91麻豆精品国产91久久久久久 | 日韩最新中文字幕 | 国产精品自产拍在线观看桃花 | 在线观看av麻豆 | 521色香蕉网站在线观看 | 伊人久在线 |