Java進階總結8——常用類
1.字符串
1.1 String
//常量池 存儲的是常量,虛擬機在編譯的時候就已經將這些數據存儲在常量池中
//堆區:new String的引用,拼接的新字符串
//字符串進行比較的時候 ==比較的是引用地址
package day14.string;
public class StringDemo {
public static void main(String[] args) {
//1.創建字符串的兩種方式
String str="ABCD";//字面量
//2.通過構造方法創建一個對象//堆中分配的內存
String str1=new String("ABCD");
//3.
String str2="ABC";
//4.合併字符串,堆中分配的內存
String str3=str2+"D";
//5.合併字符串
String str4="AB"+"CD";
//String主要分配內存的地方有兩個 1.堆區 2.常量池
if (str==str4) {
System.out.println("相等");
}else {
System.out.println("不相等");
}
//equals比較的是字面量是否相等,不比內存
if (str1.equals(str3)) {
System.out.println("字面量相等");
}else {
System.out.println("字面量不相等");
}
//判斷一個字符是否等於常量,要用常量和對象比較
String str5=null;
if ("123".equals(str5)) {
System.out.println("相等");
}
//判斷地址是否爲空
if (str5==null) {
System.out.println("地址爲空");
}
//判斷內容是否爲空
if ("".equals(str5)) {
System.out.println("內容爲空");
}
System.out.println(str);
}
}
輸出結果:
package day14.string;
import java.io.UnsupportedEncodingException;
import javax.naming.ldap.StartTlsRequest;
public class StringDemo1 {
public static void main(String[] args) throws UnsupportedEncodingException {
//通過構造方法創建一個字符串
String str=new String();
System.out.println(str.isEmpty());//判斷一個字符串是不是空“”
System.out.println(str.length());//獲取字符串的長度
byte[]b={1,2,4,6};//將byte數組轉成一個字符串
System.out.println(str);
str=new String(b,"gbk");//指定編碼格式
System.out.println(str);
char[]c={'a','d','g','c','e'};
str=new String(c,1,3);//將數組c從下標1開始,截取長度爲3,轉成字符串
System.out.println(str);
char cr=str.charAt(0);//獲取指定元素的char字符
System.out.println(cr);
//返回一個負數表示字符串小於另一個字符串,等於0表示相等,正數表示大於
int result=str.compareTo("ad");//比較字符串
result=str.compareToIgnoreCase("Hbb");//忽略大小寫
System.out.println(result);
//判斷字符串是否包含某個字符串
System.out.println(str.contains("d"));
System.out.println(str.equalsIgnoreCase("Dg"));//比較字符串,不區分大小寫
System.out.println(str.equals("Dg"));//比較字符串,區分大小寫
//靜態方法將char數組轉換成string
str=String.copyValueOf(c);
System.out.println(str);
//判斷字符串已e結尾
System.out.println(str.endsWith("e"));
//已某個字符爲前綴
System.out.println(str.startsWith("a"));
//字符串查詢indexof()查詢字符在字符串中第一次出現的索引
System.out.println(str.indexOf('g'));
System.out.println(str.indexOf("dg"));//字符串首次出現的位置
//最後一次出現的位置
System.out.println(str.lastIndexOf('g'));
System.out.println(str.lastIndexOf("ce"));
//字符串大小寫轉換,生成新的字符串
System.out.println(str.toUpperCase());//轉大寫
System.out.println(str.toLowerCase());
//截取字符串
System.out.println(str.substring(3));//從3到結尾
System.out.println(str.substring(2, 4));//[2,4)
//分割字符串,返回一個的數組
str="提筆、凝神、靜氣,述其文而匯其意,塑其形而傳其神,文不離意,以意浮其文";
String list[]=str.split(",");
for(String string:list){
System.out.println(string);
}
//替換
System.out.println(str.replace("提筆", "執筆"));
}
}
輸出結果:
1.2 StringBuilder/StringBuffer
/**
* StringBuilder
* 1.可變字符串,內容改變,但引用地址不會改變
* 2.StringBuilder它不是線程安全的,不支持同步,讀寫速度比較快,一般情況下,不考慮線程安全的情況下,我們儘可能的使用該類
* 3.該類和StringBuffer功能一樣,唯一的區別是Stringbuffer現成安全,就是性能比較差
* */
package day14.stringbuilder;
public class StringBuilderDemo {
public static void main(String[] args) {
//1.初始化一個StringBuilder對象
StringBuilder str=new StringBuilder();//空字符序列
System.out.println("str=="+str);
//2.在尾部追加字符
str.append(true);//將boolean類型轉換成String類型,內容改變,地址不變
str.append('你');//追加char類型
str.append(0.8);//追加double類型
str.append(21);//追加int類型
str.append(new Object());//追加一個對象
char[]c={'q','e','m','z','a','。'};//追加一個數組
str.append(c);
str.append(c,1,3);//從數組下標開始,長度
str.append("Hello",0,3);//追加字符序列,開始小標和結束下標,[0,3)
//3.在指定位置插入數據
str.insert(1, 'a');
str.insert(3, "World");
//4.替換 從某個位置開始到某個位置結束,替換指定的字符串
str.replace(8, 10, "qwe");
System.out.println("str=="+str);
//5.查詢
String str1=str.substring(12);//從某一位置開始到最後結束
System.out.println("str1=="+str1);
str1=str.substring(2,6);//從某處開始到某處結束
System.out.println("str1=="+str1);
//查詢指定索引位置的元素
char c1=str.charAt(2);
System.out.println(c1);
//查詢指定字符首次出現位置
int index=str.indexOf("dc");
System.out.println(index);
//查詢指定字符最後一次出現位置
index=str.lastIndexOf("dc");
System.out.println(index);
//6.刪除指定字符串
str.delete(0, 3);//[開始,結束)
System.out.println(str);
str.deleteCharAt(0);//刪除指定索引位置的字符
System.out.println(str);
//6.反轉字符串
str.reverse();
System.out.println(str);
}
}
輸出結果:
2.隨機數
2.1 Random
/**
* Random 生成一個僞隨機數,主要依靠種子
* 類型: boolean true false
* double [0.0,1.0)
* float [0.0,1.0)
* int 整數的範圍
* long long的範圍
* */
package day14.randoms;
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
//初始化一個隨機數
Random rand=new Random();//默認是以當前時間爲種子
//Random rand=new Random(10);//每次生成的數字固定
//生成隨機數據
System.out.println(rand.nextBoolean());//boolean類型
System.out.println(rand.nextDouble());//double類型
System.out.println(rand.nextFloat());//float類型
System.out.println(rand.nextInt());//int類型
System.out.println(rand.nextLong());//long類型
System.out.println(rand.nextInt(10));//[0,10)
System.out.println(10+rand.nextInt(10));//[10,20)
System.out.println((int)(rand.nextDouble()*11)+10);
}
}
輸出結果:
2.2 ThreadLocalRandom
//ThreadRandom 支持多線程
//獲取random,通過當前線程獲取一個random對象
package day14.randoms;
import java.util.concurrent.ThreadLocalRandom;
public class ThreadRandomDemo {
public static void main(String[] args) {
ThreadLocalRandom rand=ThreadLocalRandom.current();
System.out.println(rand.nextDouble(10.0,20.0));//[10.0,20.0)
System.out.println(rand.nextInt(10,20));//[10,20)
}
}
輸出結果:
2.3 UUID
//UUID是128位的隨機數,可以產生唯一的隨機數,用16進製表示
package day14.randoms;
import java.util.UUID;
public class UUIDDemo {
public static void main(String[] args) {
//String uid=UUID.randomUUID().toString();
//1.獲取UUID對象
UUID uid=UUID.randomUUID();
//3.將對象轉換成String
String str=uid.toString();
System.out.println(str);
//3.去掉-
String newStr=str.replace("-", "");
System.out.println(newStr);
}
}
輸出結果:
3.知識框架