String類:
String是final類型的(最終類),String類不可以有子類
字元串是一個特殊的對象 字元串一旦被初始化,就不可以改變
String str1="abc";
String str2=new String("abc");
/*
* str1和str2的差別:
* str1在在常量池中有一個對象:"abc"
* str2在記憶體中有堆記憶體有一個對象并引用了常量池中的"abc"位址
* str1==str2
* 結果為:false
* str1.equals(str2) 結果為:true
* 因為:String類複寫了Object類中equals方法,該方法用于判斷字元串是否相等
*/
String類适用于描述字元串事物,那麼它就提供了多個方法對字元串進行操作。
String類提供的方法: 常用操作方法: 1,擷取 字元串的長度:length() 根據位置擷取某個字元:charAt(int ) 根據字元串擷取在字元串中的位置:indexOf(String str) 如果indexOf傳回值為”—1“,則表示該str不在字元串中
從指定位置開始擷取字元在字元串中的位置:indexOf(String str,int fromIndex) 根據字元擷取在字元串中的位置:lastIndexOf(String str) 從指定位置開始擷取字元在字元串中的位置:lastIndexOf(String str,int fromIndex) 根據字元擷取在字元串中的位置: indexOf(int ch) 從指定位置開始擷取字元在字元串中的位置: indexOf(int ch,int fromIndex)
2,判斷 字元串中是否包含某一個字元串: contains
字元串是否為空:isEmpty():原理就是判斷長度是否為”0“
字元串的開始 是否是指定内容:startsWith(”字元串“) 字元串的末尾 是否是指定内容:endsWith(”字元串“)
比較字元串的大小:compareTo(”字元串“),不包含,傳回值為”-1“
判斷字元串内容是否相同:equals(”字元串“),複寫了Object中的equals方法 判斷字元串内容是否相同(忽略大小寫):equalsIsIgnoreCase(”字元串“)
3,轉換
将字元數組轉成字元串:String(char [ ]) String(char[ ],起始位置,個數):從指定位置轉換指定個數 另一種方法是:調用Arrays.toString()方法:String str=Arrays.toString(arr); 将字元串轉換成字元數組: char [ ] toCharArray()
将位元組數組轉成字元串:String(byte [ ])
将字元串轉成位元組數組:byte [ ] getBytes()
将基本資料類型轉換成字元串:String valueOf(資料類型) 4、替換
replace(”舊字元串“,”新字元串“) 如果要替換的字元串不存在,則傳回原串
5、切割
split(”規則“)
/*
* 例如:String str="zhangsan lisi wangwu"
*/
String [] arr=str.split(" ");//按空格切,切的值存入到數組中
for(int i=0;i<arr.length-1;i++)
{
System.out.println(arr[i]);
}
6、從指定位置開始截取一部分字元串:substring(begin,end),如果省略end,則截取到末尾 String str="abcdef" String str1=str.substring(1,2); (包含 頭,不包含 尾) 7、轉換 轉換為小寫:toLowerCase()
轉換成大寫:toUpperCase() 去除空格: trim():去除字元串兩端空格 對兩個字元串進行自然順序比較 compareTo():如果兩個字元串相等,則傳回”0“ 如果A字元串大于B字元串,則傳回兩數相減的正數 如果A字元串小于B字元串,則傳回兩數相減的負數
以上重要方法練習:
class StringMethodDemo
{
public static void method_7()
{
String s = " Hello Java ";
sop(s.toLowerCase());<span style="white-space:pre"> </span>//将字元串轉換為小寫字母
sop(s.toUpperCase());<span style="white-space:pre"> </span>//将字元串轉換為大寫字母
sop(s.trim());<span style="white-space:pre"> </span>//取出字元串的前後空格
String s1 = "a1c";
String s2 = "aaa";
sop(s1.compareTo(s2));<span style="white-space:pre"> </span>//compareTo比較兩個字元串
}
//截取
public static void method_sub()
{
String s = "abcdef";
sop(s.substring(2));<span style="white-space:pre"> </span>//從指定位置開始到結尾。如果角标不存在,會出現字元串角标越界異常。
sop(s.substring(2,4));<span style="white-space:pre"> </span>//包含頭,不包含尾 s.substring(0,s.length());
}
//切割
public static void method_split()
{
String s = "zhagnsa,lisi,wangwu";
String[] arr = s.split(",");<span style="white-space:pre"> </span>//切割後,傳回的是一個字元串數組
for(int x = 0; x<arr.length; x++)
{
sop(arr[x]);
}
}
//替換
public static void method_replace()
{
String s = "hello java";
//String s1 = s.replace('q','n');//如果要替換的字元不存在,傳回的還是原串。
String s1 = s.replace("java","world");
sop("s="+s);
sop("s1="+s1);
}
//字元數組轉換為字元串,字元串轉換為字元數組
public static void method_trans()
{
char[] arr = {'a','b','c','d','e','f'};
String s= new String(arr,1,3);
sop("s="+s);
String s1 = "zxcvbnm";
char[] chs = s1.toCharArray();
for(int x=0; x<chs.length; x++)
{
sop("ch="+chs[x]);
}
}
//判斷
public static void method_is()
{
String str = "ArrayDemo.java";
//判斷檔案名稱是否是Array單詞開頭。
sop(str.startsWith("Array"));
//判斷檔案名稱是否是.java的檔案。
sop(str.endsWith(".java"));
//判斷檔案中是否包含Demo
sop(str.contains(".java"));
}
//擷取
public static void method_get()
{
String str = "abcdeakpf";
//長度
sop(str.length());
//根據索引擷取字元。
sop(str.charAt(4));//當通路到字元串中不存在的角标時會發生StringIndexOutOfBoundsException。
//根據字元擷取索引
sop(str.indexOf('m',3));//如果沒有找到,傳回-1.
//反向索引一個字元出現位置。
sop(str.lastIndexOf("a"));
}
public static void main(String[] args)
{
method_7();
method_trans();
method_is();
method_get();
String s1 = "abc";
String s2 = new String("abc");
String s3 = "abc";
System.out.println(s1==s2);
System.out.println(s1==s3);
}
//輸出方法
public static void sop(Object obj)
{
System.out.println(obj);
}
}
字元串操作練習: 擷取一個字元串在另一個字元串中出現的次數
/*
* 字元串操作練習:
* 擷取一個字元串在另一個字元串中出現的次數。
* 思路:
* 1、定義個計數器。
* 2、擷取kk第一次出現的位置。
* 3、從第一次出現位置後剩餘的字元串中繼續擷取kk出現的位置,每擷取一次就計數一次。
* 4、當擷取不到時,計數完成。
*/
class StringTest
{
public static int getSubCount(String str,String key)
{
int count = 0;<span style="white-space:pre"> </span>//計數器
int index = 0;<span style="white-space:pre"> </span>//索引位置
while((index=str.indexOf(key))!=-1)<span style="white-space:pre"> </span>//在字元串中查找另一個字元串的起始位置
{
sop("str="+str);
str = str.substring(index+key.length());<span style="white-space:pre"> </span>//截取字元串并賦予字元串
count++; //如果找到,統計出現的次數
}
return count;
}
public static void main(String[] args)
{
String str = "kkabkkcdkkefkks";
sop("count="+getSubCount(str,"kk"));
}
public static void sop(String str)
{
System.out.println(str);
}
}
Integer類 MIN_VALUE:Integer類型的最小值 MAX_VALUE:Integer類型的最大值
toBinaryString(60):将60轉換為二進制 toOtcalString(60):将60轉換為8進制 toHexString(60):将60轉換為16進制
//int(數值型) --- String(字元串)
int num = 100
//通過+""
String s=num+""
//通過String類中的valueOf()
String s=String.valueOf(num)
//通過Integer類中的toString方法
String s =Integer.toString(num);
//String(字元串) --- int(數值型)
String s="100"
//Integer的構造方法
Integer i = new Integer(s)
int num = i . intValue()
//通過Integher類中的parseInt
int num = Integer . parseInt(s)//靜态方法
StringBuffer: 是字元串緩沖區 (面盆理論,不管怎麼向緩沖區中添加,始終還是StringBuffer對象) 是一個容器 StrinbBuffer的特點: 1,長度是可變的(數組不可變) 2,可以直接操作多個資料類型(數組隻能操作一個類型) 3,最終會通過toString方法變成字元串
StringBuffer sb=new StringBuffer("abc");
sb.append("d");
sb.delete();sb.replace(1,2,"java");
String和StringBuffer的差別: String :一旦被指派,就不能被改變 StringBuffer:采用的是緩沖區機制,随着資料的增多,還可以繼續開辟空間,增大 StringBuffer的初始容量為:16個字元
String和StringBuffer可以通過構造函數進行轉換
StringBuffer (String str)StringBuffer構造函數,将字元串轉換為StringBuffer
String(StringBuffer sb)String構造函數,将StringBuffer轉換為String
StringBuffer常用方法 1、存儲 append();将資料添加到已有資料的結尾 insert(位置,資料):将資料插入到指定位置 2、删除 delete(start,end):删除緩沖區中的資料,包含start,不包含end deleteCharAt(index):删除指定位置的字元 3、擷取 charAt(位置):擷取指定位置的字元 indexOf(字元串):擷取字元串所在緩沖區的位置 lastIndexOf(字元串):從右開始,擷取字元串所在緩沖區的位置 length():擷取緩沖區字元串的長度 substring(開始,結束):從緩沖區中擷取指定的開始—結束字元串 4、修改 replace(開始,結束,字元串):指定要修改的起始位置,結束位置和要修改的字元串 setCharAt(位置,字元):替換某一個字元 5、翻轉 reverse() 6、将緩沖區中的指定資料存儲到指定字元數組中 getChars(開始,結束,目的地的開始) 例:
StringBuffer sb=new StringBuffer("abcd");
char [] arr=new char[ 4 ];
sb.getChars(1,4,arr,1):将緩沖去中的資料存入到字元數組arr中
JDK1.5之後,出現了StringBuilder StringBuffer:是線程同步(安全) StringBuilder:是線程不同步(不安全) Java的更新三個因素: 1、提高效率 2、提高安全性 3、簡化書寫
API常用類的方法: 1、Object toString():一般都複寫此方法 equals():預設比較的是位址值,一般都重寫,按照自己的比較方式重寫
2、Math floor(): 小于等于參數的最大整數 ceil(): 大于等于參數的最小整數 round(): 四舍五入,原理:+0.5 random() 産生随機數 【0.0 ~ 1.0】 pow(x,y) x的y次方 sqrt() 平方根
3、Random nextInt(int n):随機産生【0 ~ n】之間的随機數 4、Scanner nextInt:從鍵盤擷取Int類型的資料 next:從鍵盤擷取一個資料
5、String equals():判斷是否相等
6、StringBuffer: append():添加 insert():插入 reverse():翻轉
7、System exit(0):退出
8、Arrays sort():排序 binarySearch():二分查找
9、Integer parseInt():轉換為Int類型 parseDouble():轉換為Double類型