01.String(概述)
字符串是一個特殊對象。
字符串最大特點:一旦被初始化就不可以改變。
==是比較兩個對象。而equals是比較對象引用的地址值。
String類復寫了Object類中的equals方法,該方法用於判斷字符串是否相同。
s1和s2的區別?
String s1="abc";
String s2=new String("abc");
s1有一個對象,s2有兩個對象。
02.String(常見功能-獲取和替換)
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在字符串中的位置。
注意:當訪問到字符串中不存在的角標時,會發生StringIndexOutOfBoundsException角標越界。
int lastIndexOf(int ch);和indexOf相反,從右往左查找。
2.判斷。
2.1:字符串中是否包含某一個字串。
boolean contains(String str);
特殊之處:indexOf(string str):可以索引str第一次出現位置,如果返回-1,表示str不在字符串中存在,所以也可以用於對指定判斷是否包含;所以該方法即可以判斷,又可以獲取出現位置。
2.2:字符串中是否有內容。
boolean isEmpty();就是判斷長度是否為0;
2.3:字符串是否以指定內容開頭。
boolean startsWith(String str);
2.4:字符串是否以指定后綴結尾。
2.5:判斷字符串內容是否相同,復寫了Object類中的equals()方法。
boolean equals(String str);
2.6:判斷內容是否相同,並忽略大小寫;
boolean equalsIgnoreCase();
03.String(轉換)
3.1:將字符數組轉換成字符串。
構造函數:String(char());String(char[],offset,count);將字符數組中的一部分轉成字符串。char[]是字符數組,offset是開始位置,count是個數。
靜態方法:static String copyValueOf(char[] data,int offset,int count);
3.2:將字符串轉成字符數組。
char[] toCharArray();
3.3:將字節數組轉成字符串。
String(byte());String(byte[],offset,count);將字字節數組中的一部分轉成字符串。char[]是字節數組,offset是開始位置,count是個數。
3.4:將字符串轉成字節數組。
byte[] getBytes();
3.5:將基本數據類型轉成字符串。static String valueOf(int);static String valueOf(double);
特殊:字符串和字節數組在轉換過程中,是可以指定編碼表的。
04.String-切割和替換
替換:String replace(oldchar,newchar);如果要替換子字符不存在,返回的是原串。
切割:String[] split(regex);
字串:獲取字符串中的一部分。
String substring(begin);從指定位置開始到結尾。如果角標不存在,會發生角標越界異常。
String substring(begin,end);包含頭,不包含尾。
05.String-轉換-去除空格-比較
1.將字符串轉換成大寫或小寫。
String toUpperCase();String toLowerCase();
2.將字符串兩端的空格去掉;
String trim();
3.對兩個字符串進行自然順序的比較。
boolean compareTo(String);
06.String-字符串練習1
需求:
模擬一個trim方法,去除字符串兩端的空格
思路:
判斷字符串第一個位置是否是空格,如果是繼續向下判斷,知道不是空格為止。判斷結尾處空格也是如此。
當開始和結尾都判斷不是空格時,就是要獲取的字符串。
class TrimDemo
{
//判斷字符串前空格的截止位置
private int getStartIndex(String str)
{
int index=0;
while(index<=str.length()-1&&str.charAt(index)==' ')
{
index++;
}
return index;
}
//判斷字符串后空格的截止位置
private int getLastIndex(String str)
{
int index=str.length()-1;
while(index>=0&&str.charAt(index)==' ')
{
index--;
}
return index;
}
//獲取去掉前后空格的字符串
public String getTrim(String str)
{
int startIndex=getStartIndex(str);
int lastIndex=getLastIndex(str);
return str.substring(startIndex,lastIndex+1);
}
}
class TrimTest
{
public static void main(String[] args)
{
String str=" 許前剛 ";
System.out.println("去空格前的字符串為:");
System.out.println(str);
System.out.println("去空格后的字符串為:");
System.out.println(new TrimDemo().getTrim(str));
}
}
07.String-字符串練習2
需求:將一個字符串進行反轉。將一個字符轉指定位置進行反轉,“abcdefg”;abedcfg
思路:
曾經學習過對數組元素進行反轉
將字符串變成數組,對數組進行反轉
將翻轉后的數組變成字符串
只要將被翻轉的部分的開始和結束位置作為參數傳遞即可
//將一個字符串指定部分進行反轉
public static String fanZhuan(String str,int start,int end)
{
String str1=str.substring(start,end+1);
char[] ch=str1.toCharArray();
for(int i=0;i<=(ch.length-1)/2;i++)
{
char temp=ch[i];
ch[i]=ch[ch.length-1-i];
ch[ch.length-1-i]=temp;
}
//for(int start=0,end=ch.length;start<end;start++,end--)
//{
// char temp=ch[start];
// ch[start]=ch[end];
// ch[end]=temp;
//}
String str2=new String(ch);
return str.substring(0,start)+str2+str.substring(end+1);
}
08.String-字符串練習3
需求:
獲取一個字符串在另一個字符串中出現的次數。abkkcdkkefkkghkk
思路:
定義一個計數器
獲取kk第一次出現的位置
從第一次出現位置后剩余的字符串中繼續獲取kk出現的位置
每獲取一次計數一次
當獲取不到時,計數完成
//獲取一個字符串在另一個字符串中出現的次數
public static int getCount(String fatherStr,String sonStr)
{
int count=0;
int index=0;
while(true)
{
int y=fatherStr.indexOf(sonStr,index);
if(y!=-1)
{
count++;
index=y+1;
}
else
{
break;
}
}
//while((index=fatherStr.indexOf(sonStr))!=-1)
//{
// fatherStr=fatherStr.substring(index+sonStr.length());
// count++;
//}
return count;
}
09.String-字符串練習4
需求:
獲取兩個字符串中最大相同字串。第一個動作:將短的那個串進行長度依次遞減的字串打印
思路:
將短的那個字串按照長度依次遞減的方式獲取到
將每獲取到的字串去長串中判斷是否包含,如果包含已經找到。
//獲取兩個字符串中最大相同字串。
public static String getMaxSubString(String maxStr,String minStr)
{
for(int x=0;x<minStr.length();x++)
{
for(int y=0,z=minStr.length()-x;z!=minStr.length()+1;y++,z++)
{
String temp=minStr.substring(y,z);
if(maxStr.contains(temp))
{
return temp;
}
}
}
return "";
}
10.11.StringBuffer-常見功能
字符串的組成原理就是通過該類實現的
StringBuffer可以對字符串內容進行增刪
StringBufffer是一個容器
很多方法與String相同
StringBuffer是可變長度的
特點:
長度是可變的
可以字節操作多個數據類型
最終會通過toString方法變成字符串
(1)存儲
StringBuffer append():將指定數據添加到已有數據的結尾處
StringBuffer insert(index,數據):可以將數據插入到指定index位置
(2)刪除
StringBuffer delete(int startint end):刪除緩沖區中的數據,包含頭,不包含尾。delete(0,sb.length());清空緩沖區
StringBuffer deleteCharAt(index):刪除指定位置的字符,就是刪一個字符。
(3)獲取
char charAt(index);根據指定位置獲取指定字符。
int indexOf(String str);
int lastIndexOf(String str);
int length();
String substring(int start,int end);
(4)修改
StringBuffer replace(start,end,String str);str是替換成的字符。這是替換一部分。
void setCharAt(index,char ch);替換指定位置的字符
(5)反轉
StringBuffer reverse();反轉
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):把緩沖區中的指定數據存儲到指定數組中。
12.StringBuilder
在JDK1.5版本之后出現了StringBuilder,不同之處在於:StringBuffer是線程同步的,StringBuilder是線程不同步。
建議:多線程用StringBuffer,單線程用StringBuilder
以后開發建議使用StringBuilder
java升級三因素:提高效率;簡化書寫;提高安全性。
13.基本數據類型對象包裝類
byte Byte
short short
int Integer
long Long
boolean Boolean
float Float
double Double
char Character
基本數據類型對象包裝類的最常見作用:
就是用於基本數據類型和字符串之間相互轉換。
基本數據類型轉字符串:
基本數據類型+"";
基本數據類型.toString(基本數據類型值);如Integer.toString(34):將34轉成“34”。
字符串轉基本數據類型:
Integer.parseInt(String str);將字符串轉換成整數。
Long.parseLong(String str);將字符串轉換成長整型數。
以此類推。。。。。。
xxx a=Xxx.parseXxx(String str);必須傳入數字格式的字符串
boolean b=parseBoolean(str);
十進制轉成其他進制:
toBinaryString()
toHexString()
toOctalString()
其他進制轉成十進制:
Integer.parseInt(str,int wei):位代表str所代表的進制,轉成十進制。
Integer i=new Integer("123");
int num=i.intValue();
這個是對象調用方式。
上面的是靜態調用方式。
14.基本數據類型對象包裝類新特性
Integer x=new Integer("123");
Integer y=new Integer(123);
x==y是false
x.equals(y)是true
JDK1.5以后出現以下新特性:
Integer i=4;
自動裝箱。
還可以直接進行運算:i=i+2;
自動拆箱,變成int類型,和2進行加法運算,再將和進行拆箱賦給x。
還可以Integer i=null;
但當i=null時,進行運算會出現異常。
Integer x=128;Integer y=128;
(x==y)的值為false
Integer x=127;Integer y=127;
(x==y)的值為true
因為a和b指向了同一個Integer對象,因為當數值在byte范圍內時,對於新特性,如果該數值已經存在,則不會開辟新空間。
