第11章 常用类
1 包装类
不同包装类都继承自Object类 Serialiazble接口表示该类表示序列化 Comparable接口用于定义自然顺序
包装类和基本数据的转换
jdk5之前手动装箱拆箱 jdk5之后自动装箱拆箱 自动装箱底层调用的是valueof方法 拆箱仍然是intvalue方法
public class Integer1 { public static void main(String[] args) { //以前 //手动装箱 Integer integer=new Integer(1); Integer integer1=Integer.valueOf(1); //手动拆箱 int n=integer1.intValue(); System.out.println(integer1); System.out.println(n); //现在 //自动装箱拆箱 Integer m=2; int k=m; System.out.println(m.intValue()); System.out.println(k); } }
结合三目运算符
Object obj1 = true? new Integer(1):new Double(2.0); System.out.println(obj1);
包装类和String类的转换 以Integer和String举例
public class Integer1 { public static void main(String[] args) { Integer integer=1; String s1=integer.toString(); System.out.println(s1); String s2=String.valueOf(integer); System.out.println(s2); String s3="fsl"+" "+integer; System.out.println(s3); Integer t1=Integer.parseInt(s1); System.out.println(t1); Integer t2=new Integer(s2); System.out.println(s2); } }
常用方法
源码解释
11.2 String类
创建string:直接赋值 String s="abc";调用构造器 String s=new String(abc);
两种方式区别:前者是直接查看常量池是否有abc数据空间 有直接指向 没有重新创建 然后指向 s最终指向的是常量池地址;后者是先在堆里创造空间 里面维护value属性 再通过value指向常量池abc数据空间 有直接指向 没有重新创建 然后指向 s最终指向是堆中的空间地址
11.3 字符串的特性
String是final类 一旦字符串对象被分配 内容不可变
结果 hsp and hava 因为 str是string修饰的 不可变 修改不影响 但ch虽然是final修饰 但只是引用不可改变 具体的值还可以改变 所以被修改
也就是说 final修饰数组时 只代表数组的引用不可修改 数组具体的值可以修改;但final修饰基本数据类型时 是不可修改的
11.4 String类常用方法
public class String1 { public static void main(String[] args) { //1. equals 前面已经讲过了. 比较内容是否相同,区分大小写 String str1 = "hello"; String str2 = "Hello"; System.out.println(str1.equals(str2));// // 2.equalsIgnoreCase 忽略大小写的判断内容是否相等 String username = "johN"; if ("john".equalsIgnoreCase(username)) { System.out.println("Success!"); } else { System.out.println("Failure!"); } // 3.length 获取字符的个数,字符串的长度 System.out.println("韩顺平".length()); // 4.indexOf 获取字符在字符串对象中第一次出现的索引,索引从0开始,如果找不到,返回-1 String s1 = "wer@terwe@g"; int index = s1.indexOf('@'); System.out.println(index);// 3 System.out.println("weIndex=" + s1.indexOf("we"));//0 // 5.lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从0开始,如果找不到,返回-1 s1 = "wer@terwe@g@"; index = s1.lastIndexOf('@'); System.out.println(index);//11 System.out.println("ter的位置=" + s1.lastIndexOf("ter"));//4 // 6.substring 截取指定范围的子串 String name = "hello,张三"; //下面name.substring(6) 从索引6开始截取后面所有的内容 System.out.println(name.substring(6));//截取后面的字符 //name.substring(0,5)表示从索引0开始截取,截取到索引 5-1=4位置,也就是[0,5) System.out.println(name.substring(2,5));//llo } }
public class String2 { public static void main(String[] args) { // 1.toUpperCase转换成大写 String s = "heLLo"; System.out.println(s.toUpperCase());//HELLO // 2.toLowerCase System.out.println(s.toLowerCase());//hello // 3.concat拼接字符串 String s1 = "宝玉"; s1 = s1.concat("林黛玉").concat("薛宝钗").concat("together"); System.out.println(s1);//宝玉林黛玉薛宝钗together // 4.replace 替换字符串中的字符 s1 = "宝玉 and 林黛玉 林黛玉 林黛玉"; //在s1中,将 所有的 林黛玉 替换成薛宝钗 // 老韩解读: s1.replace() 方法执行后,返回的结果才是替换过的. // 注意对 s1没有任何影响 String s11 = s1.replace("宝玉", "jack"); System.out.println(s1);//宝玉 and 林黛玉 林黛玉 林黛玉 System.out.println(s11);//jack and 林黛玉 林黛玉 林黛玉 // 5.split 分割字符串, 对于某些分割字符,我们需要 转义比如 | \\等 String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦"; // 1. 以 , 为标准对 poem 进行分割 , 返回一个数组 // 2. 在对字符串进行分割时,如果有特殊字符,需要加入 转义符 \ String[] split = poem.split(","); poem = "E:\\aaa\\bbb"; split = poem.split("\\\\"); System.out.println("==分割后内容==="); for (int i = 0; i < split.length; i++) { System.out.println(split[i]); } // 6.toCharArray 转换成字符数组 s = "happy"; char[] chs = s.toCharArray(); for (int i = 0; i < chs.length; i++) { System.out.println(chs[i]); } // 7.compareTo 比较两个字符串的大小,如果前者大, // 则返回正数,后者大,则返回负数,如果相等,返回0 // 老韩解读 // (1) 如果长度相同,并且每个字符也相同,就返回 0 // (2) 如果比较到两个字符不相等 // 就返回 if (c1 != c2) { // return c1 - c2; // } // (3) 如果前面的部分都相同,就返回 str1.len - str2.len String a = "jcck";// len = 4 String b = "jack";// len = 4 String c = "jacka";//len = 5 System.out.println(a.compareTo(b));// 返回值是 'c' - 'a' = 2的值 System.out.println(b.compareTo(c)); // 8.format 格式字符串 /* 占位符有: * %s 字符串 %c 字符 %d 整型 %.2f 浮点型 */ String name = "john"; int age = 10; double score = 56.857; char gender = '男'; //将所有的信息都拼接在一个字符串. String info = "我的姓名是" + name + "年龄是" + age + ",成绩是" + score + "性别是" + gender + "。希望大家喜欢我!"; System.out.println(info); //老韩解读 //1. %s , %d , %.2f %c 称为占位符 //2. 这些占位符由后面变量来替换 //3. %s 表示后面由 字符串来替换 //4. %d 是整数来替换 //5. %.2f 表示使用小数来替换,替换后,只会保留小数点两位, 并且进行四舍五入的处理 //6. %c 使用char 类型来替换 String formatStr = "我的姓名是%s 年龄是%d,成绩是%.2f 性别是%c.希望大家喜欢我!"; String info2 = String.format(formatStr, name, age, score, gender); System.out.println("info2=" + info2); } }
11.5 StringBuffer类
stringbuffer构造器
package com.hspedu.stringbuffer_;
public class StringBuffer02 {
public static void main(String[] args) {
//构造器的使用
//1. 创建一个 大小为 16的 char[] ,用于存放字符内容
StringBuffer stringBuffer = new StringBuffer();
//2 通过构造器指定 char[] 大小
StringBuffer stringBuffer1 = new StringBuffer(100);
//3. 通过 给一个String 创建 StringBuffer, char[] 大小就是 str.length() + 16
StringBuffer hello = new StringBuffer("hello");
}
}
String/StringBuffer相互转换
public class String2 { public static void main(String[] args) { String s="byx"; StringBuffer sb=new StringBuffer(s); StringBuffer sb1=new StringBuffer(); sb1.append(s); System.out.println(sb); System.out.println(sb1); String s1=sb.toString(); String s2=new String(s); System.out.println(s1+s2); } }
注意:String通过+拼接 但StringBuffer和StringBuilder通过append()进行拼接
StringBuffer常见方法
package com.hspedu.stringbuffer_;
public class StringBufferMethod {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("hello");
//增
s.append(',');// "hello,"
s.append("张三丰");//"hello,张三丰"
s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏100true10.5"
System.out.println(s);//"hello,张三丰赵敏100true10.5"
//删
/*
* 删除索引为>=start && <end 处的字符
* 解读: 删除 11~14的字符 [11, 14)
*/
s.delete(11, 14);
System.out.println(s);//"hello,张三丰赵敏true10.5"
//改
//老韩解读,使用 周芷若 替换 索引9-11的字符 [9,11)
s.replace(9, 11, "周芷若");
System.out.println(s);//"hello,张三丰周芷若true10.5"
//查找指定的子串在字符串第一次出现的索引,如果找不到返回-1
int indexOf = s.indexOf("张三丰");
System.out.println(indexOf);//6
//插
//老韩解读,在索引为9的位置插入 "赵敏",原来索引为9的内容自动后移
s.insert(9, "赵敏");
System.out.println(s);//"hello,张三丰赵敏周芷若true10.5"
//长度
System.out.println(s.length());//22
System.out.println(s);
}
}
练习:
public class StringBufferMethod { public static void main(String[] args) { StringBuffer price=new StringBuffer("1234560.789"); for(int i= price.lastIndexOf(".")-3;i>0;i-=3 ){ price=price.insert(i,","); } System.out.println(price); } }
11.6 StringBuilder类
11.7 String StringBuffer StringBuilder的比较和效率测试
效率 : StringBuilder > StringBuffer > String
11.8 Math类
Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
11.9 Arrays类
import java.util.Arrays; import java.util.Comparator; public class ArraysMethod01 { public static void main(String[] args) { Book[] books=new Book[4]; books[0]=new Book(100,"book1"); books[1]=new Book(200,"book22"); books[2]=new Book(300,"book333"); books[3]=new Book(400,"book4444"); Arrays.sort(books,new Comparator(){ @Override public int compare(Object obj1,Object obj2){ Book o1=(Book) obj1; Book o2=(Book) obj2; return o2.getName().length()-o1.getName().length();//按书名降序 } }); System.out.println(Arrays.toString(books)); } } class Book{ private int price; private String name; Book(){} Book(int price,String name){ this.price=price; this.name=name; } public int getPrice(){ return price; } public String getName(){ return name; } @Override public String toString(){ return ("Book name:"+name+" price:"+price); } }
11.10 System类
11.11 BigInteger类和BigDecimal类
常用方法
11.12 日期类
第一代
第二代
第三代
import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; public class LocalDate_ { public static void main(String[] args) { //第三代日期 //1. 使用now() 返回表示当前日期时间的 对象 LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now() System.out.println(ldt); //2. 使用DateTimeFormatter 对象来进行格式化 // 创建 DateTimeFormatter对象 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String format = dateTimeFormatter.format(ldt); System.out.println("格式化的日期=" + format); System.out.println("年=" + ldt.getYear()); System.out.println("月=" + ldt.getMonth()); System.out.println("月=" + ldt.getMonthValue()); System.out.println("日=" + ldt.getDayOfMonth()); System.out.println("时=" + ldt.getHour()); System.out.println("分=" + ldt.getMinute()); System.out.println("秒=" + ldt.getSecond()); LocalDate now = LocalDate.now(); //可以获取年月日 LocalTime now2 = LocalTime.now();//获取到时分秒 //提供 plus 和 minus方法可以对当前时间进行加或者减 //看看890天后,是什么时候 把 年月日-时分秒 LocalDateTime localDateTime = ldt.plusDays(890); System.out.println("890天后=" + dateTimeFormatter.format(localDateTime)); //看看在 3456分钟前是什么时候,把 年月日-时分秒输出 LocalDateTime localDateTime2 = ldt.minusMinutes(3456); System.out.println("3456分钟前 日期=" + dateTimeFormatter.format(localDateTime2)); } }
小结:该部分内容较多且有难度 谢谢各位读者能读到这里 也希望大家多多点赞评论 我们共同进步~