字符串
一、字符串
1.1、String類
字符串是一種很常見的數據類型,在很多的編程語言中都對字符串進行了封裝;在java中,用String類封裝字符串。
字符串最大的特點是一旦被初始化就不可以改變。
String類用於描述字符串,那麼它一定提供了多個方法對字符串進行操作,下面介紹常用的操作方法:
1、獲取:
int length():獲取長度;
char charAt(int index):根據位置獲取字符;
int indexOf(int ch):根據字符獲取位置,返回的是第一次出現的位置;
int indexOf(int ch,int fromIndex):根據字符獲取位置,從fromIndex開始;
int indexOf(String str ):獲取字符串出現的位置,返回的是第一齣現的位置;
int lastIndexOf(int ch):反向查找,獲取的查找字符時第一次出現的位置。
2、判斷:
boolean contains(String str):判斷是否包含子串;
boolean startsWith(String str):判斷是否以指定字符串開頭;
boolean endsWith(String str):判斷是否以指定字符串結尾;
boolean equalsIgnoreCase(String str);判斷是否相同,並忽略大小寫。
3、轉換:
String(char[]value):將字符數組轉換成字符串;
static String valueOf(char[]):將字符數組轉換成字符串;
char[] toCharArray():將字符串轉成字符數組;
byte[] getBytes():將字符串轉成字節數組;
static String valueOf(int )//double float:將基本數據類型轉成字符串。
4、替換:String replace(char oldChar,char newChar);
5、切割:String[] split(String regex);
6、獲取子串:String subString(int begin,int end);
7、轉換,去除空格,比較:
String toUpperCase();String toLowerCase();大小寫轉換;
String trim();去除兩端的空格;
int compareTo(String str):比較兩個字符串的大小。
下面代碼演示String類的功能:
1、簡單演示:
package itheima.day13;
public class StringDemo {
public static void method_get(){
String str ="asdffaghha";
//長度
sop(str.length());
//獲取
sop(str.lastIndexOf('s'));
sop(str.charAt(4));
sop(str.lastIndexOf('a'));
}
// 切割
public static void method_split(){
String s = "zhangsan,lisi,wangwu";
String[] arr = s.split(",");
for(int i=0;i<arr.length;i++)
sop(arr[i]);
}
public static void main(String[] args) {
String s1 = "abc";
String s2 = new String("abc");
// System.out.println(s1 == s2);//false
// System.out.println(s1.equals(s2));//true
// method_get();
method_split();
}
public static void sop(Object obj){
System.out.println(obj);
}
}
2、練習:package itheima.day13;
public class StringTest {
public static void main(String[] args) {
// 1、
String str1 = " fgfh fghfdb ";
String newStr = myTrim(str1);
sop(newStr);
// 2、
String reveStr =reverseString(newStr);
sop(reveStr);
// 3、
String str2 ="KKJJHHNNBBVVHHUIUOOKKJJHH";
int count = getSubCount(str2,"JJ");
sop(count);
// 4、
String MaxStr = getMaxSubString("1254568956","4525");
sop(MaxStr);
}
public static void sop(Object obj){
System.out.println(obj);
}
// 需求:模擬一個trim方法,去除字符串兩端的空格。
// 思路:1、判斷字符串第一個位置是否是空格,直到不是空格爲止
// 2、當開始和結尾都不是空格時,獲取該子串
public static String myTrim(String str){
int start = 0,end = str.length()-1;
while(start<=end && str.charAt(start)==' ')
start++;
while(end>=start && str.charAt(end)==' ')
end--;
return str.substring(start,end+1);
}
// 練習2:將一個字符串進行反轉
// 思路:1將字符串轉成字符數組,反轉字符數組
// 2將反轉後的字符數組變成字符串。
public static String reverseString(String str){
char[] arr = str.toCharArray();
reverse(arr);
return new String(arr);
}
private static void reverse(char[] arr){
for(int start=0,end=arr.length-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;
}
// 練習3:獲取一個字符串在另一個字符串中出現的次數
// 思路:1、定義一個計數器。2,獲取位置,計數器自增
public static int getSubCount(String str,String key){
int count = 0;
int index = 0;
while((index = str.indexOf(key,index))!=-1){
index = index +key.length();
count++;
}
return count;
}
// 練習4、獲取兩個字符串中最大相同子串。
// 思路:1、將短的那個子串按照長度遞減的方法獲取
// 2、將每次獲取到的子串,判斷長串是否包含,如果包含,找到!
public static String getMaxSubString(String str1,String str2){
String max ="",min ="";
max = (str1.length()>str2.length())?str1:str2;//長串
min = (max == str1)?str2:str1;//短串
// 查找
for(int x =0;x<min.length();x++){
for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++){
// y:字符串的頭,z:字符串的尾;包含頭,不包含尾
String temp = min.substring(y,z);
if(max.contains(temp))
return temp;
}
}
return "";
}
}
1.2、StringBuffer類與StringBuilder類
StringBuffer是字符串緩衝區,是一個容器;長度可變並且可以操作多種數據類型。最後通過toString()方法變成字符串。下面介紹StringBuffer類的基本方法:
1、存儲:
StringBuffer append(data):將數據插入結尾處;
StringBuffer insert(int index,data):插入數據到指定位置。
2、刪除:
StringBuffer delete(int start,int end):刪除緩衝區中的指定數據;
Stringbuffer deleteCharAt(int index):刪除指定位置的字符。
3、修改:StringBuffer replace(int start,int end,String str):替代
4、反轉:StringBuffer reverse()。
StringBuilder是JDK1.5以後纔出現的,用法基本與StringBuffer相同,但它不不同步,StingBuffer同步。
版本升級三個因素:提高效率;簡化書寫;提高安全性。
簡單代碼演示:
package itheima.day13;
public class StringBufferDemo {
public static void main(String[] args) {
method_add();
method_del();
}
public static void method_add(){
// 容器
StringBuffer sb = new StringBuffer();
// 追加
sb.append(true).append("sdggh").append(563.0);
System.out.println(sb);
}
public static void method_del(){
StringBuffer sb = new StringBuffer("abxcd");
sb.delete(1, 3);
// sb.delete(0, sb.length());
System.out.println(sb.toString());
}
}
二、包裝類
根據面向對象的思想,數據類型該怎麼操作,只有數據本身最清楚。爲了操作的方便,因此把基本數據類型封裝成了包裝類,並向外提供了很多操作基本數據的方法。
基本數據包裝類有八個:Byte、Short、Integer、Long、Boolean、Float、Double和Character,分別對應具體的八個基本數據類型。
包裝類最常見作用:用於基本數據類型和字符串類型之間的轉換。
基本數據類型轉成字符串:基本數據類型+“”;基本數據類型包裝類.toString(基本數據類型),例如:Integer.toString(34)。
字符串轉成基本數據類型:xxx a = Xxx.parseXxx(string)。
十進制轉成其他進制:Integer.toXxxString(int)。
其他進制轉換成十進制:Integer.parseInt(String s,int radix)//radix表示進制數
自動裝箱與自動拆箱:這是JDK5.0之後出現的新特性,例如:Integer x = new Integer(4);可以直接寫成Integer x = 4;//自動裝箱;x = x + 5;//自動拆箱。通過intValue()方法。
簡單代碼演示:
package itheima.day13;
//基本數據類型包裝類最常用的操作:
//用於基本數據類型與字符串之間的轉換
public class IntegerDemo {
public static void main(String[] args) {
// 整數類型的最大值、最小值
sop("int max = "+Integer.MAX_VALUE);
sop("int min = "+Integer.MIN_VALUE);
// 自動裝箱//new Integer(4)
Integer x = 4;
// 自動拆箱//x.intValue()
x =x+2;
}
private static void sop(Object obj){
System.out.println(obj);
}
}