11.1String字符串的基本理解
①.String声明为final的,不可被继承
②.String实现了Serializable接口:表示字符串是支持序列化的。
实现了Comparable接口:表示String可以比较大小
③.String内部定义了final char[] value用于存储字符串数据
④.String:代表不可变的字符序列。简称:不可变性。
11.2.字符串创建的两种方式
String s1 = "abc";
String s2 = new String("abc");
s1:指向常量池
s2:①指向堆②指向常量池
intern()返回常量池地址
11.3String的常用方法
①intlength():返回字符串的长度:returnvalue.length
②charcharAt(intindex):返回某索引处的字符returnvalue[index]
③booleanisEmpty():判断是否是空字符串:returnvalue.length==0
④Stringtrim():返回字符串的副本,忽略前导空白和尾部空白
⑤booleanequals(Objectobj):比较字符串的内容是否相同
⑥intcompareTo(StringanotherString):比较两个字符串的大小
⑦Stringsubstring(intbeginIndex,intendIndex):返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
⑧intindexOf(Stringstr):返回指定子字符串在此字符串中第一次出现处的索引
11.4String 与基本数据类型、包装类之间的转换
/*
String --> 基本数据类型、包装类:调用包装类的静态方法:parseXxx(str)
基本数据类型、包装类 --> String:调用String重载的valueOf(xxx)
*/
@Test
publicvoidtest1(){
Stringstr1="123";
intnum=Integer.parseInt(str1);
Stringstr2=String.valueOf(num);//"123"
System.out.println(str1==str3);
}
}
11.5String、StringBuffer、StringBuilder三者的异同
String:不可变的字符序列;底层使用char[]存储
StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储
StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储
11.6StringBuffer的常用方法
增:append(xxx)
删:delete(intstart,intend)
改:setCharAt(intn,charch)/replace(intstart,intend,Stringstr)
查:charAt(intn)
插:insert(intoffset,xxx)
长度:length();
遍历:for()+charAt()/toString()
11.7对比String、StringBuffer、StringBuilder三者的效率
从高到低排列:StringBuilder > StringBuffer > String
11.8日期常用方法
//1.System类中的currentTimeMillis()
@Test
publicvoidtest1(){
longtime=System.currentTimeMillis();
//返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
//称为时间戳
System.out.println(time);
}
//SimpleDateFormat的实例化
@Test
publicvoidtest2(){
//格式化:日期 --->字符串
Datedate=newDate();
SimpleDateFormatsdf1=newSimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//格式化
Stringformat1=sdf1.format(date);
System.out.println(format1);//2019-02-18 11:48:27
Datedate2=sdf1.parse("2020-02-18 11:48:27");
System.out.println(date2);
}
//DateTimeFormatter:格式化或解析日期、时间
//类似于SimpleDateFormat
@Test
publicvoidtest3(){
DateTimeFormatterformatter3=DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
//格式化
Stringstr4=formatter3.format(LocalDateTime.now());
System.out.println(str4);//2019-02-18 03:52:09
}
11.9Comparable接口与Comparator的使用
11.9.1Comparable接口的使用
1.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,进行了从小到大的排列
2.对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法。
如果当前对象this大于形参对象obj,则返回正整数,
如果当前对象this小于形参对象obj,则返回负整数,
如果当前对象this等于形参对象obj,则返回零。
*/
@Test
publicvoidtest1(){
Goods[]arr=newGoods[5];
arr[0]=newGoods("lenovoMouse",34);
arr[1]=newGoods("dellMouse",43);
arr[2]=newGoods("xiaomiMouse",12);
arr[3]=newGoods("huaweiMouse",65);
arr[4]=newGoods("microsoftMouse",43);
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
publicclassGoodsimplementsComparable{
privateStringname;
privatedoubleprice;
publicGoods() {
}
publicGoods(Stringname,doubleprice) {
this.name=name;
this.price=price;
}
publicStringgetName() {
returnname;
}
publicvoidsetName(Stringname) {
this.name=name;
}
publicdoublegetPrice() {
returnprice;
}
publicvoidsetPrice(doubleprice) {
this.price=price;
}
@Override
publicStringtoString() {
return"Goods{"+
"name='"+name+'\''+
", price="+price+
'}';
}
//指明商品比较大小的方式:按照价格从低到高排序,再按照产品名称从高到低排序
@Override
publicintcompareTo(Objecto) {
if(oinstanceofGoods){
Goodsgoods=(Goods)o;
if(this.price>goods.price){
return1;
}elseif(this.price<goods.price){
return-1;
}else{
return-this.name.compareTo(goods.name);
}
}
thrownewRuntimeException("传入的数据类型不一致!");
}
}
11.9.2Comparator接口的使用:定制排序
@Test
publicvoidtest2(){
Goods[]arr=newGoods[6];
arr[0]=newGoods("lenovoMouse",34);
arr[1]=newGoods("dellMouse",43);
arr[2]=newGoods("xiaomiMouse",12);
arr[3]=newGoods("huaweiMouse",65);
arr[4]=newGoods("huaweiMouse",224);
arr[5]=newGoods("microsoftMouse",43);
Arrays.sort(arr,newComparator() {
//指明商品比较大小的方式:按照产品名称从低到高排序,再按照价格从高到低排序
@Override
publicintcompare(Objecto1,Objecto2) {
if(o1instanceofGoods&&o2instanceofGoods){
Goodsg1=(Goods)o1;
Goodsg2=(Goods)o2;
if(g1.getName().equals(g2.getName())){
return-Double.compare(g1.getPrice(),g2.getPrice());
}else{
returng1.getName().compareTo(g2.getName());
}
}
thrownewRuntimeException("输入的数据类型不一致");
}
});
System.out.println(Arrays.toString(arr));
}
11.10其他常用类的使用
@Test
publicvoidtest2() {
BigIntegerbi=newBigInteger("1243324112234324324325235245346567657653");
BigDecimalbd=newBigDecimal("12435.351");
BigDecimalbd2=newBigDecimal("11");
System.out.println(bi);
//除不尽报错
//System.out.println(bd.divide(bd2));
System.out.println(bd.divide(bd2,BigDecimal.ROUND_HALF_UP));
//指定小数点后面位数
System.out.println(bd.divide(bd2,25,BigDecimal.ROUND_HALF_UP));
}