String的特點:
1.String使用final修飾,不能被繼承,在字符串的底部封裝了字符數組以及針對字符數組的操作。
2.字符串對象一旦被創建內容將不會改變(這個是對重用對象來說的,後面將會說道原因),但是字符串的引用可以重新賦值。
3.java語言中的字符串使用Unicod編碼方式,任何一個字符串對應兩個字節的長度。
關於字符串對象一旦被創建就不能被改變的原因解釋如下:
由於字符串的重用的概率遠遠大於修改的概率,因此java中規定字符串對象一旦被創建,就不能改變。我們都知道基本數據類型存放在棧裏面,引用數據類型存放在堆裏面,當程序中多次出現相同的字符串對象的時候,爲了降低內存的開銷,java中提供一個常量池(用來存放字符串字面量),建立的引用指向同一個內存區,因此字符串對象一旦被創建,就不能改變。 如果使用new的話將會強制的創建一個對象。
String常用的方法:
1.獲取字符串長度:
package Day01;
/**
* int length()
* 獲取字符串長度
* 無論是中文還是英文每個字符都是一個長度
* @author 123
*
*/
public class StringDemo1 {
public static void main(String[] args) {
String str="我愛學習";
System.out.println(str.length());
}
}
2.indexOf方法,該方法有幾個重載方法:
package Day01;
/**
* int indexOf(String str)
* 該方法用來查找給定的字符串在當前字符串中的位置
* 如果有返回下標,如果沒有返回-1。
* 該方法有幾個重載方法
* @author 123
*
*/
public class StringDemo2 {
public static void main(String[] args) {
String str="thinking in java";
int index=str.indexOf("in");
System.out.println("index:"+index);
/**
* 重載方法允許從指定的位置開始查找
*/
index=str.indexOf("in",3);
System.out.println("index:"+index);
/**
* 查找最後一次出現字符串的位置
*/
index=str.lastIndexOf("in");
System.out.println("index:"+index);
}
}
3.字符串的截取:
package Day01;
/**
* String substring(int start,int end)
* 截取字符串,從指定的位置(start)開始截取到指定的位置
* end
* java api 有一個特點,通常用兩個數字表示範圍,都是
* 含頭不含尾
* @author 123
*
*/
public class StringDemo3 {
public static void main(String[] args) {
String str="thinking in java";
/**
* 截取字符串
*/
String str1=str.substring(0, 10);
System.out.println("sub:"+str1);
/**
* String substring(一個參數)
* 表示從這個數字開始截取到字符串的末尾
*/
String str2=str.substring(1);
System.out.println("sub:"+str2);
}
}
4.去除字符串兩邊的空白字符
package Day01;
/**
* String trim()
* 去除當前字符串兩邊的空白字符
* @author 123
*
*/
public class StringDemo4 {
public static void main(String[] args) {
String str=" helloworld ";
String trim=str.trim();
System.out.println(str);
System.out.println(trim);
}
}
5.返回指定位置的字符:
package Day01;
/**
* char charAt(int index)
* 返回指定索引位置的字符
* @author 123
*
*/
public class StringDemo5 {
public static void main(String[] args) {
String str ="thinking in java";
//查看第五個字符是什麼?
String str1=str.substring(4, 5);
System.out.println(str1);
char c=str.charAt(4);
System.out.println(c);
}
}
6.判斷字符串是否是以指定的字符結尾或者開始:
package Day01;
/**
* booelan startWith(String Str)
* boolena endWith(String str)
* 判斷當前字符串是否是以指定的字符串開始或者結尾
* @author 123
*
*/
public class StringDemo6 {
public static void main(String[] args) {
String str="thinking in java";
boolean start=str.startsWith("thi");
System.out.println("strat:"+start);
boolean end=str.endsWith("java1");
System.out.println("end:"+end);
}
}
7.字符串大小寫的轉化:
package Day01;
/**
* String toUpperCase()
* String toLowerCase()
* 將當前字符串的英文轉化爲全部大寫或者小寫
* 只支持英文
* @author 123
*
*/
public class StringDemo7 {
public static void main(String[] args) {
String str="我愛Java";
String upper=str.toUpperCase();
System.out.println("轉化爲大寫:"+upper);
String lower=str.toLowerCase();
System.out.println("轉化爲小寫:"+lower);
}
}
StringBUilder的用法:由於java中規定了字符串對象一旦被創建就不能被改變,但是如果要改變的話,就需要重新創建新的字符串的對象,這樣的話,內存中將會不斷的開闢內存空間,與c語言不同的是,java中不在使用的對象有垃圾回收機制gc來回收,而c語言需要人爲的開闢內存空間和釋放內存空間,因此內存能夠得到充分的利用,但java的不同,因此gc的速度跟不上cpu的速度。爲此java中提供了對字符串操作的類StringBuilder。String中對字符串值的改變需要重新開闢內存空間,後者是在原來的基礎上對字符串進行操作。下面將對StrinBuilder中對字符串操作的方法做出介紹具體的代碼實現如下:
package Day01;
/**
* StringBuiler提供了用於修改字符串內容的相關的方法
* 其內部的維護是一個可變的字符數組,當數組滿了之後會自動的擴容,所以修改的都是在當前對象的
* 內部完成
* 當頻繁修改字符串內容時應該使用當前類來完成
* @author 123
*
*/
public class StringBuilderDemo1 {
public static void main(String[] args) {
String str="努力學習java";
/*
* 爲了提高字符串的拼接的效率,應該將
* 將String轉化爲StringBuilder
* 可以使用有參的構造方法
* StringBuider也有無參的構造方法,默認
* 表示空字符串
*/
StringBuilder builder=new StringBuilder(str);
/*
* 從StringBuilder轉化爲String
* 使用StringBuilder的toString方法即可
*/
str=builder.toString();
/*
* StringBuilder append(String str)
* 向字符串末尾指定的內容。
* 有若干重載方法,參數的類型不同,這些重載方法允許追
* 加其他的內容(先轉化爲字符串在追加)
*/
builder.append(",爲了找個好工作");
System.out.println(builder.toString());
/*
* StringBuilder replace(int start,inr end,String Str)
* 將指定範圍之內的字符串替換爲指定的字符串
* 努力學習java,就是爲了改變世界!
*/
builder.replace(9, 16, "就是爲了改變世界!");
System.out.println(builder.toString());
/*
* StringBuilder delete(int start,int end)
* 將當前字符串的指定範圍之內的內容刪除
*/
builder.delete(0, 8);
System.out.println(builder.toString());
/*StringBuilder insert(int index,String str)
* 將給定的字符串插入到指定的位置,原位置以及後續字符串順
* 序向後移動。
*
* 改革,就是爲了改變世界!
*/
builder.insert(0, "活着");
System.out.println(builder.toString());
/*
* StringBuilder reverse();
* 翻轉字符串
*/
builder.reverse();
System.out.println(builder.toString());
}
}
由於時間比較倉促,關於StringBuilder的方法不做過多的介紹,但是程序中有關於代碼以及方法的註釋。