Java进阶总结8——常用类
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.知识框架