- 第一講 String類
一、String類概述
String類適用於描述字符串事物。每個用雙引號括起來的字符串都是String類的一個實例。字符串是一個特殊的對象。特殊之處就在於: Stings= new String();和String s1=””;兩種寫法都是在創建對象,使用起來一樣。
二、特點
1、String是一個final的類型,即不可被繼承修改,一經初始化就終生不可改變。
2、通過String創建的對象分別可存在於字符串池(StringPool)和堆內存中。
例:
String s1 = "abc";//s1是一個類類型變量, "abc"是一個對象。String s2 = new String("abc");//s1和s2有什麼區別? //s1在內存中有一個對象。//s2在內存中有兩個對象。new創建了一個,abc代表一個String s3 = "abc";//在常量池中尋找,故不重新開闢空間,s3和s1都指向“abc”System.out.println(s1==s2);//--->falseSystem.out.println(s1==s3);//--->trueSystem.out.println(s1.equals(s2));//--->true,因爲String類複寫了Object類中equals方法,該方法用於判斷字符串是否相同。
3、對常量池的理解---->StringPool(字符串池):在java的內存分配中,存在着一個方法區,這裏有一個常量池,是存放那些常量等不變的值,StringPool即字符串池就是存在於這裏,它是一個存放字符串的公共存儲池。字符變量指向存儲池中的相應位置。如果是通過複製一個字符串變量,原始的字符串和複製的字符串將共享這個相同的字符串。
三、常見的String方法操作
1、獲取。1.1 字符串中的包含的字符數,也就是字符串的長度。
int length():獲取長度。
1.2 根據位置獲取位置上某個字符。
char charAt(int index):
1.3 根據字符獲取該字符在字符串中位置。
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) :
2、判斷。
2.1 字符串中是否包含某一個子串。
boolean contains(str):
特殊之處:indexOf(str):可以索引str第一次出現位置,如果返回-1.表示該str不在字符串中存在。
所以,也可以用於對指定判斷是否包含。
if(str.indexOf("aa")!=-1)
而且該方法即可以判斷,有可以獲取出現的位置。
2.2 字符中是否有內容。
boolean isEmpty(): 原理就是判斷長度是否爲0.
2.3 字符串是否是以指定內容開頭。
boolean startsWith(str);
2.4 字符串是否是以指定內容結尾。
boolean endsWith(str);
2.5 判斷字符串內容是否相同。複寫了Object類中的equals方法。
boolean equals(str);
2.6 判斷內容是否相同,並忽略大小寫。
boolean equalsIgnoreCase();
3、轉換。
3.1 將字符數組轉成字符串。
構造函數:String(char[])
String(char[],offset,count):將字符數組中的一部分轉成字符串。
靜態方法:
static String copyValueOf(char[]);
static String copyValueOf(char[] data, int offset, int count)
static String valueOf(char[]):
3.2 將字符串轉成字符數組。**
char[] toCharArray():
3.3 將字節數組轉成字符串。
String(byte[])
String(byte[],offset,count):將字節數組中的一部分轉成字符串。
3.4 將字符串轉成字節數組。
byte[] getBytes():
3.5 將基本數據類型轉成字符串。
static String valueOf(int)
static String valueOf(double)
//3+"";//String.valueOf(3);
特殊:字符串和字節數組在轉換過程中,是可以指定編碼表的。
4、替換
String replace(oldchar,newchar);
5、切割
String[] split(regex);
6、子串。獲取字符串中的一部分。
String substring(begin);
String substring(begin,end);
7、轉換,去除空格,比較。
7.1 將字符串轉成大寫或則小寫。
String toUpperCase();
String toLowerCase();
7.2 將字符串兩端的多個空格去除。
String trim();
7.3 對兩個字符串進行自然順序的比較。
int compareTo(string);
實例練習:
1、
/*
需求:將一個字符串反轉 ,並能將字符串中指定部分進行反轉
思路:1、將字符串轉換爲字符數組
2、將數組反轉
3、將字符數組轉換爲字符串
*/
public class test01_ReverseString {
public static void main(String[] args) {
String s="abcd efgh";
sop(s);
// ReverseString r=new ReverseString();
// sop(new ReverseString().reverseString(s));
sop(ReverseString.reverseString(s)); //因爲方法靜態的,類直接調用
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class ReverseString
{
public static String reverseString(String s,int start,int end)
{
//將字符串變爲字符數組
char[] chs=s.toCharArray();
//將數組進行反轉
charReverse(chs,start,end);
//將字符數組變爲字符串
return new String(chs);
}
//反轉整個字符串
public static String reverseString(String s)
{
return reverseString(s,0,s.length());
}
//反轉指定字符數組位置
private static void charReverse(char[] ch,int start,int end)
{
for (int x=start,y=end-1; x<y;x++,y--)
{
swap(ch,x,y);
}
}
//交換相應數組元素
private static void swap(char[] ch, int start,int end)
{
char temp=ch[start];
ch[start]=ch[end];
ch[end]=temp;
}
}
結果爲2、
import java.util.Arrays;
/*
需求:對一個字符串中的字符進行自然排序 ,例如:"bdacxrtq" --> "abcdqrtx";
思路: 1、將字符串轉換爲字符數組。
2、對字符數組進行選擇、冒泡排序
3、將排好序的字符數組轉換爲字符串
*/
public class test02_SortString {
public static void main(String[] args) {
String s1 = "bdacxrtq";
System.out.println(s1);
// 將字符串轉換成數組
char[] ch = s1.toCharArray();
//定義一個對字符串進行排序的函數
sortString(ch);
//將字數組轉換成字符串
s1 = new String(ch);
System.out.println(s1);
}
private static void sortString(char[] ch) {
//2 對數組進行排序
Arrays.sort(ch);
}
}
結果爲
3、
/*
需求:獲取一個字符串在另一個字符串中出現的次數
思路:1、定義一計數器
2、獲得字符串第一次在另個字符中出現的位置
3、從第一次出現的位置後剩餘的字符串中繼續獲取字符串出現的次數,每出現一次,計數器就加一次
3、當獲取不到時候,計數停止
*/
public class test03_CountString {
public static void main(String[] args) {
String s="Live the life you love!!";
sop("s="+s);
sop("count="+countString(s,"ve"));
}
public static int countString(String s,String key)
{
int count=0;//定義計數器
int index=0;//定義獲取角標變量
while((index=s.indexOf(key,index))!=-1)//如果包含,則繼續
{
index=index+key.length();//從找到的子串位置後一位開始獲取
count++;
}
return count;
}
private static void sop(Object obj)
{
System.out.println(obj);
}
}
結果爲
4、
/*
需求:獲取兩個字符串中最大相同子串
思路:1、將短的一個字符串與長的進行比較,如果沒有,則將短串的字串按長度遞減的方式獲取
2、將每次獲取的子串,去長串中判斷是否包含,包含即找到。
*/
public class test04_MaxSubString {
public static void main(String[] args) {
String s1="HelloafsfWorldcgagb!";
String s2="fWorldafdffsfsfsfsfdc";
sop("s1="+s1);
sop("s2="+s2);
sop(getMaxSubstring(s1,s2));
}
public static String getMaxSubstring(String s1,String s2)
{
String max,min;
max=(s1.length()>s2.length())?s1:s2;//判斷出大字符串
min=(max==s1)?s2:s1;//判斷出小字符串
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);//獲取短字符串子串
if(max.contains(temp))//如果長串包含,則表示找到
return temp;
}
}
return "沒有相同的字符串";
}
//打印輸出
public static void sop(Object obj)
{
System.out.println(obj);
}
}
結果爲
第二講 StringBuffer類
一、概念
StringBuffer是字符串緩衝區。是一個容器。
二、特點
1,長度是可變化的。(數組是固定的)
2,可以字節操作多個數據類型。(數組只能操作一個)
3,最終會通過toString方法變成字符串。
三、常見操作方法
C create U update R read D delete
1,存儲。
StringBuffer append():將指定數據作爲參數添加到已有數據結尾處。
StringBuffer insert(index,數據):可以將數據插入到指定index位置。
2,刪除。
StringBuffer delete(start,end):刪除緩衝區中的數據,包含start,不包含end。
StringBuffer deleteCharAt(index):刪除指定位置的字符。
3,獲取。
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start, int end)
4,修改。
StringBuffer replace(start,end,string);
void setCharAt(int index, char ch) ;
5,反轉。
StringBuffer reverse();
6,將緩衝區中指定數據存儲到指定字符數組中。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
7,JDK1.5 版本之後出現了StringBuilder.
StringBuffer是線程同步。
StringBuilder是線程不同步。
以後開發,建議使用StringBuilder
升級三個因素:
1,提高效率。
2,簡化書寫。
3,提高安全性。
第三講 基本數據類型對象包裝類
一、基本數據類型對象包裝類。
byte Byte
short short
int Integer
long Long
boolean Boolean
float Float
double Double
char Character
基本數據類型對象包裝類的最常見作用,就是用於基本數據類型和字符串類型之間做轉換。
二、基本數據類型轉成字符串。
基本數據類型+""
基本數據類型.toString(基本數據類型值);
如: Integer.toString(34);//將34整數變成"34";
三、字符串轉成基本數據類型。
靜態:
xxx a = Xxx.parseXxx(String);
int a = Integer.parseInt("123");
double b = Double.parseDouble("12.23");
boolean b = Boolean.parseBoolean("true");
非靜態:
Integer i = new Integer("123");
int num = i.intValue();
四、十進制轉成其他進制。
toBinaryString();
toHexString();
toOctalString();
其他進制轉成十進制。
parseInt(string,radix);
五、JDK1.5版本以後出現的新特性:
自動裝箱和拆箱。
Integer m = 128;
Integer n = 128;
sop("m==n:"+(m==n));//-->false
Integer a = 127;
Integer b = 127;
sop("a==b:"+(a==b));//結果爲true。因爲a和b指向了同一個Integer對象。
//因爲當數值在byte範圍內容,對於新特性,如果該數值已經存在,則不會在開闢新的空間。