String:
1:public final class String extends Object
String s1 = "abc"; //s1是一個類類型變數, "abc"是一個對象。 //字串最大特點:一旦被初始化就不可以被改變。
String s2 = new String("abc"); //s2是兩個對象,s2和“abc”這是s1和s2的區別所在。
String s3 = "abc";
System.out.println(s1==s2); //兩個對象 false
System.out.println(s1.equals(s2)); //String類複寫了Object類中equals方法,該方法用於判斷字串地址是否相同。 true
System.out.println(s1==s3)); true
2:String類是對字串事物的描述。該類定義了專門用於操作字串的方法。常見的操作方法如下:
擷取:
字串中的包含的字元數,也就是字串的長度。》》》》》》》》》》》》》int length():擷取長度。
根據位置擷取位置上某個字元。》》》》》》》》》》》》》》》》》》》》》char charAt(int index):
根據字元擷取該字元在字串中位置。》》》》》》》》》》》》》》》》》》
int indexOf(int ch):返回的是ch在字串中第一次出現的位置。
int indexOf(int ch, int fromIndex) :從fromIndex指定位置開始,擷取ch在字串中出現的位置。
int indexOf(String str):返回的是str在字串中第一次出現的位置。
int indexOf(String str, int fromIndex) :從fromIndex指定位置開始,擷取str在字串中出現的位置。
int lastIndexOf(int ch) :
判斷:
字串中是否包含某一個子串。》》》》》》》》》》》》》》》》》》》》boolean contains(str):
特殊之處:indexOf(str):可以索引str第一次出現位置,如果返回-1.表示該str不在字串中存在。所以,也可以用於對指定判斷是否包含。
if(str.indexOf("aa")!=-1)而且該方法即可以判斷,也可以擷取出現的位置。
字元中是否有內容。》》》》》》》》》》》》》》》》》》》》》》》》》boolean isEmpty(): 原理就是判斷長度是否為0.
字串是否是以指定內容開頭。》》》》》》》》》》》》》》》》》》》》》》》》boolean startsWith(str);
字串是否是以指定內容結尾。》》》》》》》》》》》》》》》》》》》》》》》》boolean endsWith(str);
判斷字串內容是否相同。複寫了Object類中的equals方法。》》》》》》》》》》》boolean equals(str);
判斷內容是否相同,並忽略大小寫。》》》》》》》》》》》》》》》》》》》》》》》boolean equalsIgnoreCase();
轉換:
將字元數組轉成字串。》》》》》》》》》》》》》》》》》》》》》》》》》
建構函式:String(char[])
String(char[],offset,count):將字元數組中的一部分轉成字串。
靜態方法:static String copyValueOf(char[]);
static String copyValueOf(char[] data, int offset, int count)
static String valueOf(char[]):
將字串轉成字元數組。》》》》》》》》》》》》》》》》》》》》》》》》》》》char[] toCharArray():
將位元組數組轉成字串。》》》》》》》》》》》》》》》》》》》》》》》》》》》String(byte[])
將位元組數組中的一部分轉成字串。》》》》》》》》》》》》》》》》》》》》》》String(byte[],offset,count):
將字串轉成位元組數組。》》》》》》》》》》》》》》》》》》》》》》》》》》》byte[] getBytes():
將基礎資料型別 (Elementary Data Type)轉成字串。》》》》》》》》》》》》》》》》》》》》》》》》》
static String valueOf(int)
static String valueOf(double)
特殊:字串和位元組數組在轉換過程中,是可以指定編碼錶的。
替換:
String replace(oldchar,newchar);
切割:
String[] split(regex);
子串。擷取字串中的一部分。
String substring(begin); String substring(begin,end);
轉換,去除空格,比較。
將字串轉成大寫或則小寫。》》》》》》》》》》》》》 String toUpperCase(); String toLowerCase();
將字串兩端的多個空格去除:》》》》》》》》》》》》 String trim();
對兩個字串進行自然順序的比較。》》》》》》》》》》int compareTo(string);
去空格:
public static String myTrim(String str) {
int start = 0,end = str.length()-1;//長度減一正好是最後一個字元的角標
while(start<=end && str.charAt(start)==' ')
start++;
while(start<=end && str.charAt(end)==' ')
end--;
return str.substring(start,end+1); //這個方法是提取包含頭不包含尾的,所以end要加1
}
字串反轉:
public static String reverseString(String s,int start,int end) {
//字串變數組。
char[] chs = s.toCharArray();
//反轉數組。
reverse(chs,start,end);
//將數組變成字串。
return new String(chs);
}
public static String reverseString(String s) {
return reverseString(s,0,s.length());
}
private static void reverse(char[] arr,int x,int y) {
for(int start=x,end=y-1; start<end ; start++,end--) {
swap(arr,start,end);
}
}
private static void swap(char[] arr,int x,int y) {
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
擷取一個字串在另一個字串中出現的次數。
public static int getSubCount_1(String str,String key) {
int count = 0; int index = 0;
while((index=str.indexOf(key))!=-1) { //只要沒有找到那個key就迴圈去找
sop("str="+str);
str = str.substring(index+key.length()); //找到了key第一次出現的位置,再加上KEY的長度就可以從第一次出現的位置後去找key的位置,找到了就++
count++;
}
return count;
}
或者下面
public static int getSubCount_2(String str,String key) {
int count = 0,index = 0;
while((index= str.indexOf(key,index))!=-1) {
sop("index="+index);
index = index + key.length();
count++;
}
return count;
}
擷取兩個字串中最大相同子串: 將短的那個子串按照長度遞減的方式擷取到。 將每擷取到的子串去長串中判斷是否包含,如果包含,已經找到!。
public static String getMaxSubString(String s1,String s2) {
String max = "",min = "";
max = (s1.length()>s2.length())?s1: s2;
min = (max==s1)?s2: s1;
// sop("max="+max+"...min="+min);
for(int x=0; x<min.length(); x++) {
for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++) {
String temp = min.substring(y,z);
sop(temp);
if(max.contains(temp)) //if(s1.indexOf(temp)!=-1)
return temp;
}
}
return "";
}
StringBuffer:是字串緩衝區,是一個容器。
特點:長度是可變化的;可以位元組操作多個資料類型;最終會通過toString方法變成字串。
功能:
儲存:
StringBuffer append():將指定資料作為參數添加到已有資料結尾處。
StringBuffer insert(index,資料):可以將資料插入到指定index位置。
刪除:
StringBuffer delete(start,end):刪除緩衝區中的資料,包含start,不包含end。
StringBuffer deleteCharAt(index):刪除指定位置的字元。
擷取。
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start, int end)
修改:
StringBuffer replace(start,end,string);
void setCharAt(int index, char ch) ;
反轉: StringBuffer reverse();
將緩衝區中指定資料存放區到指定字元數組中: void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
JDK1.5 版本之後出現了StringBuilder:StringBuffer是線程同步。 StringBuilder是線程不同步。建議使用StringBuilder
基礎資料型別 (Elementary Data Type)對象封裝類
基礎資料型別 (Elementary Data Type)對象封裝類的最常見作用,就是用於基礎資料型別 (Elementary Data Type)和字串類型之間做轉換。
1:基礎資料型別 (Elementary Data Type)轉成字串。
基礎資料型別 (Elementary Data Type).toString(基礎資料型別 (Elementary Data Type)值); Integer.toString(34);
2:字串轉成基礎資料型別 (Elementary Data Type)。
xxx a = Xxx.parseXxx(String); double b = Double.parseDouble("12.23"); //必須傳入數字格式的字串。
Integer i = new Integer("123"); int num = i.intValue();
3:十進位轉成其他進位: toBinaryString(); toHexString(); toOctalString();
4:其他進位轉成十進位: parseInt(string,radix);
對象封裝類新特性:
Integer x = new Integer(4);
Integer x = 4;//自動裝箱。等同於new Integer(4)
x = x /*相當於 x.intValue() */ + 2; //x+2:x 進行自動拆箱。變成成了int類型。和2進行加法運算。再將和進行裝箱賦給x。但是新特性有
一個弱點,就是Integer x = null;這樣是不行的,因為它的指向為空白的話x.intValue()就會拋null 指標異常,所以在進行裝箱和拆箱的時候要先判
斷是否為null,