String類
String類的特點:
1.字符串是一個特特殊的對象
2.字符串一旦初始化就不可以被改變
3.String s = “abc”; 存儲在字符串常量池中
4.存儲在池中的字符,沒有的就建立,有的就引用
注意:
1.
String s1 = "abc";//在字符常量池中創建一個對象“abc”
String s2 = new String("abc");//在堆中創建兩個對象:new、“abc”;
2.String類中的equals複寫了Object中的equals建立了String類自己的判斷字符串是否相同的依據===>其實就是比較字符串內容
(“==”比較的是等號兩方的地址值)
String s = new String(); 等效於 String s = “”; 不等效於 String s = null;
String類的構造函數:
//將byte數組中的一部分轉成字符串
String(byte[],int offset,int length,String charsetNmae)
//將字符數組中的一部分轉成字符串。
String(char[], int offset, int count)
在String類的(indexOf())方法中可以索引角標,獲取字符串。
相應角標的字符位置,我們可以通過-1來確定,該字符或者字符串是否存在
字符串的分割:
1.以字符對字符串進行分割
示例:
public class Test {
/**
* @param args
* 以字符對字符串進行分割
*/
public static void main(String[] args) {
String s = "張三,李四,王五";
String[] arr = s.split(",");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
結果爲:
張三
李四
王五
2.將字符串切割爲字符數組
示例:
public class Test {
/**
* @param args
* 將字符串切割爲字符數組
*/
public static void main(String[] args) {
String s = "asdsadsfgg";
char[] arr = s.toCharArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
結果爲:
a
s
d
s
a
d
s
f
g
g
3.將字符串切割爲字節數組
public class Test {
示例:
/**
* @param args
* 以字節對字符串進行分割
*/
public static void main(String[] args) {
String s = “asdsadsfgg”;
byte[] arr = s.getBytes();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
結果爲:
97
115
100
115
97
100
115
102
103
103
將字符串中的字母轉換成大小寫:
1.將字符串所有的字母轉換成大寫
示例:
public class Test {
/**
* @param args
* 將字符串所有的字母轉換成大寫
*/
public static void main(String[] args) {
String s = "gHJlklkaSDd";
System.out.println(s.toUpperCase());
}
}
結果爲:
GHJLKLKASDD
2.將字符串所有的字母轉換成小寫
示例:
public class Test {
/**
* @param args
* 將字符串所有的字母轉換成小寫
*/
public static void main(String[] args) {
String s = "gHJlklkaSDd";
System.out.println(s.toLowerCase());
}
}
結果爲:
ghjlklkasdd
字符串的替換:replace(oldchar,newchar) || replace(oldString,newString)方法
示例:
public class Test {
/**
* @param args
* 字符串的替換
*/
public static void main(String[] args) {
String s = "aaaaa";
System.out.println(s.replace('a','b'));
}
}
結果爲:
bbbbb
trim()方法==》返回去除元字符串兩端空格的子字符串
示例:
public class Test {
/**
* @param args
* 除元字符串兩端空格的子字符串
*/
public static void main(String[] args) {
String s = " ABCDE ";
System.out.println(s);
System.out.println(s.trim());
}
}
結果爲:
ABCDE
ABCDE
模擬一個和trim()功能相同的方法:
public class StringText {
/**
* 模擬一個和trim()功能相同的方法
* @param args
*/
public static void main(String[] args) {
/*當獲取到一個字符串後通過while和indexOf()方法*/
String s = " hjhkakakakakajsdvgfg ";
boolean flang = true;
int index = -1;
int lastIndex = s.length()+1;
int count = 0;
int lastCount = s.length();
while(flang){
if((index = s.indexOf(' ',index+1)) != -1){
count++;
// System.out.println(count);
}
else{
flang = false;
}
}
flang = true;
while(flang){
if((lastIndex = s.lastIndexOf(' ',lastIndex-1)) != -1){
lastCount--;
// System.out.println(lastCount);
}
else{
flang = false;
}
}
String sw = s.substring(count,lastCount);
System.out.println(sw);
}
}
結果爲:
akakakakajsdv
concat()==》間接等於”+“
獲取字符串中字符的個數:length()方法
根據字符在字符串中第一次出現的位置獲取角標:
int indexOf(int ch)//獲取字符角標
int indexOf(int ch,int fromIndex)//從指定位置開始,獲取字符角標
int indexOf()//獲取字符串角標
int indexOf()//從指定位置開始,獲取字符串角標
根據字符在字符串中最後一次出現的位置獲取角標:
int lastIndexOf(int ch)//獲取字符角標
int lastIndexOf(int ch,int fromIndex)//從指定位置開始,獲取字符角標
int lastIndexOf()//獲取字符串角標
int lastIndexOf()//從指定位置開始,獲取字符串角標
獲取字符串中的一部分字符串(也叫子串):
substring(int beginIndex,int endIndex)//子串從哪裏開始,到哪裏結束
substring(int beginIndex)//子串從哪裏開始,到字符串尾端結束
示例:
public class Test {
/**
* @param args
* 獲取字符串中的一部分字符串
*/
public static void main(String[] args) {
String s = "ABCDEFGHIJKLMN";
//子串從哪裏開始,到哪裏結束
System.out.println(s.substring(0,5));
//子串從哪裏開始,到字符串尾端結束
System.out.println(s.substring(3));
}
}
結果爲:
ABCDE
DEFGHIJKLMN
判斷是否包含:caotains()方法
示例:
public class Test {
/**
* @param args
* 判斷是否包含
*/
public static void main(String[] args) {
String s = "ABCDEFGHIJKLMN";
System.out.println(s.contains("AB"));
}
}
結果爲:
true
其他包含的方法:
startWith()==》字符串開頭是否包含
endWith()===》字符串結尾是否包含
比較字符串大小:compare()===》以ASCII碼值進行比較
intren():對字符串常量池進行操作;在字符串常量池在尋找需要的字符串,沒有就創建
StringBuffer:就是字符串緩衝區;用於存儲數據的容器
特點:
1.長度可變
2.可以存儲不同類型的數據
3.最終都轉換成字符串進行使用
4.可以對字符串內容進行修改
StringBuffer常用的操作方法:
1.添加
s(這裏代表一對象)
s.append(4).append(asd).append…=》可無限添加
(添加數據鏈,每添加一個代表一個獨立的字符串)
2.插入
s(這裏代表一對象)
s.insert(1,”haha“)=》1是插入的位置(位置從0開始),”哈哈“是插入的字符串(會將每個插入的字符串分割爲獨立的字符)
3.刪除
delete(start,end):包含頭,不包含尾
deleteCarAt(int index)=》刪除指定位置的元素
4.查找:charAt()=》依據角標查找字符
indexOf()=》依據字符查找角標(字符第一次出現的位置)
lastIdexOf()=》依據字符查找角標(字符最後一次出現的位置)
5.修改
replace(start,end,String)=》修改某段字符串內容(包含頭不包含尾)
void setCharAt(index,char)=》修改指定位置字符
其他方法;
設置串緩衝區長度:void setLength()=》當緩衝區中字符不夠長度,會自動填充空字符
將字符串緩衝區翻轉:reverse()方法。
StringBuffer的構造函數:
StringBuffer()==》初始容量爲16字節
StringBuffer(int capacity)==》自定義初始容量
JDK1.5出現StringBuiler
StringBuffer 和 StringBuilder 的區別:
StringBuffer線程安全。
StringBuilder線程不安全。
單線程操作,使用StringBuilder 效率高。
多線程操作,使用StringBuffer 安全。
StringBuffer 和 StringBuilder 的區別:
StringBuffer線程安全。
StringBuilder線程不安全。
單線程操作,使用StringBuilder 效率高。
多線程操作,使用StringBuffer 安全。
基本數據類型對象包裝類
用於描述基本數據類型值對象的類,就稱爲:基本數據類型對象包裝類
爲了方便操作基本數據類型值,將其封裝成了對象,在對象中自定義了屬性和行爲,豐富了該數據的操作
關鍵字 對應的類名
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
Boolean Boolean
Integer對象:
將int基本數據類型轉換爲基本數據類型對象包裝類:
int num = 4;
Integer i= new Integer(num);
字符串 轉換爲 基本數據類型對象包裝類:
xxxParseXxx(”xxx類型的字符串“)
注意:只有character沒有parse方法
如果字符串被Integer進行了對象的封裝,若想轉變成基本數據類型值,可以使用另一個非靜態的方法intValue()
基本類型 轉換爲 字符串
1.基本類型數值+”“
2.用String類中的靜態方法valueOf()
3.用Integer中的靜態方法valueOf()
十進制轉其他進制:
十進制轉成二進制:toBinaryString
十進制轉成八進制:toOctalString
十進制轉成十六進制:toHexString
十進制轉成人妖:toString(int num,int radix)
其他進制轉十進制:
Integer.Parseint(”值“,進制)
在jdk1.5版本後,對基本數據類型對象包裝類進行升級。
Integer i = new Integer(4); //1.5版本之前的寫法;
Integer i = 4; //自動裝箱,1.5版本後的寫法;
什麼時候自動裝箱?
當基本數據類型值賦值給了引用數據類型時,就會自動裝箱
什麼時候自動拆箱?
當引用數據類型值和基本數據類型值運算的時候,引用數據類型就會自動拆箱。
在自動裝箱時:如果裝箱的在一個字節大小以內則不會開闢新空間
練習:
public class StringText {
/**
* 給定一個字符串數組按照字典順序進行從大到小的排序 {"sad","wqre","cvcx","try","xcv","lkl"}
*
* @param args
*/
public static void main(String[] args) {
/*
* 首先對給定的字符串進行分割裝載進String[]數組中
* 然後通過雙層for循環和CompareTo()方法對String[]中的字符串進行排序然後輸出
*/
String[] s = { "sad", "aqre", "acvcx", "try", "xcv", "lkl" };
printarray(s);
swap(s);
printarray(s);
}
public static void printarray(String[] s) {
System.out.print
("{");
for (int i = 0; i < s.length; i++) {
if(s[i] == s[s.length-1]){
System.out.println(s[i]+"}");
break;
}
System.out.print(s[i]+",");
}
}
private static void swap(String[] s) {
for (int i = 0; i < s.length; i++) {
for (int j = i + i; j < s.length; j++) {
if (s[i].compareTo(s[j]) > 0) {
String temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
}
}
結果爲:
{sad,aqre,acvcx,try,xcv,lkl}
{acvcx,aqre,lkl,try,xcv,sad}