05.java中常用的类

news2024/11/18 23:49:16

1.包装类

基本类型包装类
booleanBoolean
charCharacter
byteByte
intInteger
longLong
floatFloat
doubleDouble
shortShort

从byte开始的包装类都是继承的Number,然后Number继承的object

从byte上面的都是直接继承的oblect

(1).装箱和拆箱

装箱:基本类型-->包装类型(valueof)

拆箱:包装类型-->基本类型(intvalue)

public class wrapper {
    
    //手动装箱int-->Integer
     int n1=10;
    Integer integer1=Integer.valueOf(n1);
  

    //手动拆箱Inreger-->int
    Integer intege2=new Integer(20);
    int n2=integer.intValue();

    //现在都是自动的装箱拆箱
    //自动装箱
    int n3=100;
    Integer integer3=n3;//调用了valueOf方法
    //自动拆箱
    int n4=integer3;//调用了intvalue方法

}

(2). 包装类(Integer)-->String,String-->包装类(Integer)

包装类-->String

Integer i=10;//自动装箱
//方式1:
String s1=i+"";
//方式2:
String s2=i.toString();
//Integer里的tostring方法返回值String类型
//方式3:
String s3=String.valueOf(i);
//如果不理解可以ctrl+鼠标点击查看源码,valof方法调用了tostring方法,返回值都是String类型的

String-->包装类

String s4="123";
Integer i2=Integer.parseInt(s4);//自动装箱
Integer i3=new Integer(s4);//Integer有一个这样的构造器

(3).常用方法

 

2.String

1.基本介绍

(1).String对象用于保存字符串,使用双引号括起来

String s1="abc";
String s2="3211";

(2).字符串的字符使用unicode编码,一个字符(不区分字母汉字)占2个字节。1字节=8bit

(3).String类常用的构造器

//String s3=new String();
//String s4=new String(String original);
//String s5=new String(char[] a);
//String s6=new String(char[] a,int startindex,int count);

(4).String 类实现了接口 Serializable[string 可以串行化:可以在网络传输]
                               接口 Comparable [string 对象可以比较大小]
(5).String 是final类,不能被其他的类继承

(6).String 有属性 private final char value[ ];用于存放字符串内容
     一定要注意: value 是一个final类型,不可以修改(内容可以修改,内存地址不能修改)

final char value[]={'a','b','c'};
value[0]='1';//可以修改值
final char v2[]={'1','2','3'};
v2=value;//不能修改地址

2.创建剖析

两种创建String对象的区别:

方式一:直接赋值String s1="qwq''

方式二:调用构造器String s2=new String(''qwq'');

方式一: 先从常量池查看是否有“qwq”数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s1最终指向的是常量池的空间地址。
方式二:先在堆中创建空间,里面维护了value属性,指向常量池的qwq空间,如果常量池没有”qwq”,重新创建,如果有,直接通过value指向。s2最终指向的是堆中的空间地址。
 

3.string常用方法

equals // 区分大小写,判断内容是否相等
equalslgnoreCase //忽略大小写的判断内容是否相等
length // 获取字符的个数,字符串的长度
indexof //获取字符在字符串中第1次出现的索引,索引从0开始,如果找不到,返回-1
lastIndexof //获取字符在字符串中最后1次出现的索引,索引从0开始,如找不到,返回-1
substring //截取指定范围的子串
trim //去前后空格
charAt:获取某索引处的字符,注意不能使用Str[index] 这种方式

public class ff {
    public static void main(String[] args) {
        //1.str1.equals(str2)
        //2.
        String s1="He";
        String s2="he";
        System.out.println(s1.equalsIgnoreCase(s2));//true
        //3.
        System.out.println("qwq".length());//3
        //4.indexof('x')x第一次出现的位置,从0开始,找不到返回-1
        //indexof("xq")还可以是字符串
        String s3="xqwqxw";
        System.out.println(s3.indexOf('x'));//0
        System.out.println(s3.indexOf("xq"));
        //5.lastIndex('w')
        //lastindexof("xw")
        System.out.println(s3.lastIndexOf('w'));//5
        System.out.println(s3.lastIndexOf("xw"));//4
        //6.subString(4)从4开始截取后面的,包括4【】
        //subString(0,5)截取0-5,不包括5【)
        //substring(2,5)[)
        System.out.println(s3.substring(4));//xw
        System.out.println(s3.substring(0,3));//xqw
        System.out.println(s3.substring(2,5));//wqx


    }
}

public class ff2 {
    public static void main(String[] args) {
        String s="hello";
        //1.toUpperCase()输出大写
        System.out.println(s.toUpperCase());
        //2.toLowerCase()输出小写
        String s2="ASD";
        System.out.println(s.toLowerCase());
        //3.concat拼接字符串
        String s3="qwq";
        System.out.println(s.concat(s2).concat(s3));
        //4.replace("a","b")a替换为b
        String s4="汪汪喵喵咩咩";
        System.out.println(s4.replace("汪汪","喵喵"));
        //原来的s4不受影响
        System.out.println(s4);//还是 汪汪喵喵咩咩
        //5.split("x")以x为标准进行分割,返回一个数组,特殊字符要加转义符\
        //\\\\等于\\,一个\配一个\
        String s5="1,2,3,4455";
        String ss1[]=s5.split(",");
        for (int i = 0; i < ss1.length; i++) {
            System.out.println(ss1[i]);
        }
        String s6="C:\\a\\b";
        String ss2[]=s6.split("\\\\");//用\\分割
        for (int i = 0; i < ss1.length; i++) {
            System.out.println(ss1[i]);
        }
        //6.toCharArrY()把字符串转为字符数组
        char cc1[]=s6.toCharArray();
        for (int i = 0; i < cc1.length; i++) {
            System.out.println(cc1[i]);
        }
        //7.compareTo()字符串比较
        //每个字母一一比较,返回前面减后面的askm值
        String s7="asd";
        String s8="aaf";
        System.out.println(s7.compareTo(s8));//s-a的ascm=18
        String s9="asdf";
        String s10="aafff";
        System.out.println(s9.compareTo(s10));//18=s-a
        //
    }

 format占位符

3.StringBuffer

1.基本介绍

(1).StringBuffer是final类,不能被继承

(2).他实现了Serializable接口,可以保存到文件,或网络传输

(3).继承了抽象类AbstractStringBuilder

(4).AbstractStringBuilder有属性char[ ]value,存放字符序列,保存在堆中

(5).有缓冲机制,增加或删除不用每次都改堆中的地址,除非放不下了,会开辟更大的地址空间,效率比string高。

2.构造方法

public class a {
    public static void main(String[] args) {
        //常用的构造方法
        //1.创建一个大小为16的char[],用来存放字符内容
        StringBuffer stringBuffer = new StringBuffer();
        //2.创建一个指定大小的char[],100
        StringBuffer stringBuffer1 = new StringBuffer(100);
        //3.创建一个大小为"123''+16的char[]
        StringBuffer stringBuffer2 = new StringBuffer("123");
    }
    
}

3.String和StringBuffer转换

String-->StringBuffer

StringBuffer-->String

public class b {
    public static void main(String[] args) {
        //S--->SB
        //1.使用StringBuffeer构造器
        String s1="qwq hi";
        StringBuffer sb1 = new StringBuffer(s1);
        //2.使用append方法
        StringBuffer sb2 = new StringBuffer();
        sb2=sb2.append(s1);
        //SB-->S
        //1.使用string构造器
        StringBuffer sb3 = new StringBuffer("你好");
        String s3 = new String(sb3);
        //2.使用tostring()
        String s4 = new String();
        s4=sb3.toString();
    }
}

4.常用方法

 append添加

delete删除

replace修改(替换)

indexof(查找第一次出现的位置)

insert(在指定位置插入,原来的内容后移)

public class c {
    public static void main(String[] args) {
        StringBuffer sb1 = new StringBuffer("qwq");
        //增
        sb1.append(",1");
        sb1.append("2");
        sb1.append("34567");
        System.out.println(sb1);//qwq,123456
        //删:删除索引[3,4)
        System.out.println(sb1.delete(3,4));//qwq123456
        //改(替换):[3,4)
        System.out.println(sb1.replace(3,4,"aa"));//qwqaa23456
        //查:查找字符串第一次出现的位置
        System.out.println(sb1.indexOf("a"));//3
        //插:在3的位置插入a
        System.out.println(sb1.insert(3,"b"));//qwqbaa23456
    }
}

4.StringBuilder

1.基本介绍

(1).一般用在单线程,是stringBuffer的简易替换

(2).继承了abstractStringBulider类,实现了Serializable接口,可以保存到文件,或网络传输

(3).StringBuilder是final类,不能被继承

(4).有属性char[ ]value,存放字符序列,保存在堆中

2.方法

append

insert

和stringBuffer一样

5.String,sBuffer,Sbuilder三者的比较

String: 不可变字符序列,效率低,但是复用率高
StringBuffer: 可变字符序列、效率较高(增删)、线程安全
StringBuilder: 可变字符序列、效率最高、单个线程使用,线程不安全

对字符串做大量修改,不要使用String

结论:
1.如果字符串存在大量的修改操作,一般使用 StringBuffer 或StringBuilder
2.如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder
3.如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer
4.如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息等
StringBuilder 的方法使用和 StringBuffer 一样

6.Math

public class mathMethod {
    public static void main(String[] args) {
        //1.绝对值abs
        System.out.println(Math.abs(-10));//10
        //2.幂pow
        System.out.println(Math.pow(2,3));//8.0
        //3.向上取整ceil
        System.out.println(Math.ceil(10.34));//11.0
        //4.向下取整floor
        System.out.println(Math.floor(-3.11));//-3.0
        //5.四舍五入round
        System.out.println(Math.round(-88.1));//-88
        System.out.println(Math.round(-88.9));//-89
        //6.开根号sqrt
        System.out.println(Math.sqrt(16));//4.0
        System.out.println(Math.sqrt(-16));//NaN
        //7.[0,1)的随机数random
        //生成[2,7]的随机整数
        System.out.println((int)(2+Math.random()*(7-2+1)));
        //8.max,min
        System.out.println(Math.max(1,2));//2
        System.out.println(Math.min(22,0));//0
    }
}

7.Arrays类

常用方法 


public class a {
    public static void main(String[] args) {
        Integer integer[]= {1,2,3,4,5};
        //1.tostring方法显示数组
        System.out.println(Arrays.toString(integer));
        //2.sort排序
        Integer arr[]= {11,2,3,44,-5};
        //默认排序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));//从小到大
        //定制排序
        //有2个参数,1个要排序的数组,1个匿名内部类,实现compare方法
        Arrays.sort(arr, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Integer i1=(Integer) o1;
                Integer i2=(Integer) o2;
                return i2-i1;
                //返回的大于0从大到小,小于0是从小到大
            }
        });
    }
}
public class b {
    public static void main(String[] args) {
        //1.二叉查找,数组要有序的
        int[]arr={1,2,90,123,567};
        int index=Arrays.binarySearch(arr,1);//寻找'1',返回索引值0
        //如果不存在,返回-(low+1)  low是如果存在它应该在的位置的索引
        System.out.println(index);

        //2.copyOf 数组元素的复制
        //从arr数组中复制arr.length个元素到newArr数组中
        int []newArr=Arrays.copyOf(arr,arr.length);
        System.out.println(Arrays.toString(newArr));

        //3.fill数组元素的填充
        Integer []num={1,2,3,4};
        Arrays.fill(num,9);
        System.out.println(Arrays.toString(num));

        //4.equals比较2个数组中的元素是否一样
        //num数组被替换为9了都
        Integer []num1={9,9,9,9};
        System.out.println(Arrays.equals(num1,num));

        //5.asList把(2,3,4.5)数据转为一个list集合
        List asList=Arrays.asList(2,3,4,5);
        System.out.println(asList);//{2,3,4,5}
        //返回的asList编译类型List(接口)
        //运行类型java.util.Arrays#ArrayList,Arrays类的静态内部类
    }
}

8.BigInteger和BigDecimal

(1).BigInteger

//当我们编程中,需要处理很大的整数,Long 不够用
//可以使用BigInteger的类来搞定

public class a {
    public static void main(String[] args) {
        BigInteger bigInteger = new BigInteger("2333333333");
        BigInteger bigInteger1 = new BigInteger("2333");
        System.out.println(bigInteger);
        //1,在对 BigInteger 进行加减乘除的时候,需要使用对应的方法,不能直接进行 + -
        //2.add加法
        BigInteger add = bigInteger.add(bigInteger1);
        System.out.println(add);
        //3.subtract-(减法)   multipy*(乘法)  divide/(除)和上面一样

    }
}

 (2).BigDecimal

Decimal小数

//当我们需要保存一个精度很高的小数时,double 不够用
//可以是 BigDecimal

public class a {
    public static void main(String[] args) {
        double d=1.222222222222222222222222222333333333333d;
        System.out.println(d);//精度被缩减
        //当我们需要保存精度很高的数时,使用BigDecimal
        BigDecimal b1=new BigDecimal("1.222222222222222222222222222333333333333");
        BigDecimal b2=new BigDecimal("1.1");
        System.out.println(b1);
        //如果对BigDecimal进行加减乘除,要使用对应方法
        System.out.println(b1.add(b2));
        System.out.println(b1.subtract(b2));
        System.out.println(b1.multiply(b2));
        System.out.println(b1.divide(b2,BigDecimal.ROUND_CEILING));//可能抛出异常ArithmeticException,无限循环小数
        //在调用divide方法时,指定精度即可BigDecimal.ROUND_CEILING
        //保留分子的精度,分子是12位,结果保留12位
        
    }
}

9.日期类

(1).Data(第一代)

package com.qhx.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.SimpleTimeZone;

/**
 * @author qhx
 * @version 1.0
 */
public class datae01 {
    public static void main(String[] args) throws ParseException {
        //这里的Data是util包里的
        Date d1=new Date();//获取当前系统时间
        System.out.println("当前日期="+d1);
        //输出当前日期=Fri Jul 26 10:40:58 CST 2024
        //默认输出日期是国外的,因此通常需要对格式进行转换

        //格式转换
        //把Date格式化
        //创建SimpleDateFormat对象,可以指定相应的格式
        //这里的格式使用的是指定字母
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
        String format=sdf.format(d1);
        System.out.println("当前日期"+format);
        //当前日期2024年07月26日 03:50:12 星期五

        //把一个格式化的String 转为对应的Date
        String s="2024年02月10日 10:22:20 星期一";//要和上面sdf的格式一致
        Date p=sdf.parse(s);
        System.out.println("当前日期"+p);//Date格式
        System.out.println(sdf.format(p));//字符串格式

        //(2).
        //通过指定毫秒数得到时间
        Date d2=new Date(9234567);
        System.out.println("d2毫秒数对应的时间"+d2);
        //获取时间对应的毫秒数
        System.out.println("d1对应的毫秒数"+d1.getTime());
    }
}

(2).Calendar(第二代)

package com.qhx.date;

import java.util.Calendar;

public class calendar01 {
    public static void main(String[] args) {
        //1.Calendar是一个抽象类, 并且构造器是private
        //2.可以通过 getInstance() 来获取实例
        //3.提供大量的方法和字段提供给程序员
        Calendar c = Calendar.getInstance(); //创建日历类对象//比较简单,自由
        System .out.println(c);
        //获取日历对象的某个日历字段
        //通过get方法获取
        System.out.println("年:"+ c.get(Calendar.YEAR));
        System.out.println("月:"+ c.get(Calendar.MONTH));
        System.out.println("日:"+ c.get(Calendar.DAY_OF_MONTH));
        System.out.println("时:"+ c.get(Calendar.HOUR));
        System.out.println("分:"+ c.get(Calendar.MINUTE));
        System.out.println("秒:"+ c.get(Calendar.SECOND));
        //根据需求组合
        System.out.println(c.get(Calendar.YEAR)+"年"+c.get(Calendar.MONTH)+"月"+c.get(Calendar.DAY_OF_MONTH)+"日");
    }
}

(3).localDate(日期+时间),localTime(时间),localDateTime(日期)(第三代)

package com.qhx.date;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class LocalDate01 {
    public static void main(String[] args) {
        //使用now()返回当前日期时间
        LocalDateTime ldt=LocalDateTime.now();//localTime.now()//localDateTime()
        System.out.println(ldt);
        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());

        //格式化日期DateTimeFormatter类
        DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM-ddd HH:mm:ss");
        String format=dateTimeFormatter.format(ldt);
        System.out.println("格式化的日期类"+format);


        //通过plus和minus方法对当前日期加或减
        LocalDateTime localDateTime=ldt.plusDays(80);
        //ldt加80天后是多会
        System.out.println("80天后"+dateTimeFormatter.format(localDateTime));

        //ldt122分钟前是多会
        LocalDateTime localDateTime1=ldt.minusMinutes(122);
        System.out.println(dateTimeFormatter.format(localDateTime1));
    }
}

(4).instant时间戳

public class instans01 {
    public static void main(String[] args) {
        //1.通过 静态方法 now() 获取表示当前时间戳的对象
        Instant now = Instant.now() ;
        System.out.println(now);
        //2。通过 from 可以把 Instant转成 Date
        Date date = Date.from(now);
        //3。通过 date的toInstant() 可以把 date 转成Instal
        Instant instant = date .toInstant() ;

    }
}

7.练习

(1).

//下面的代码是否正确,为什么?
//Double d = 100d;
//Float f = 1.5f;
//正确,自动装箱

(2).

//如下两个题目输出结果相同吗?各是什么?
//题目1:
//Object obj1 = true? new Integer(1) : new Double(2.0):
//System.outprintln(obj1);

//题目2:
//Object obj2;
//if(true)
//   obj2 = new Integer(1);
//else
//   obj2 = new Double(2.0):
//System.out.println(obj2);
//输出什么?
//不相同,题目一是三元运算符,第二个表达式是double类型的,会整体的精度提升到double
//三目运算符注意整体性
//题目1输出:1.0
//题目2输出:1
布尔表达式?表达式1:表达式2

运算过程:如果布尔表达式的值为 true ,则返回 表达式1 的值,否则返回 表达式2 的值

注意三元运算符的整体性。

(3).

Integer创建机制

看看下面代码,输出什么结果?为什么

public void method10() {
        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i == j);

        //Flase,引用类型==是判断地址是否相同

        Integer m = 1; //底层 Integer.valueOf(1); -> 阅读源码ctrl+鼠标点击
        Integer n = 1;//底层 Integer.valueOf(1);
        System.out.println(m == n);
        //true,没有超出范围
        //所以,Integer.valueOf(1)这里主要是看范围
        // -128 ~ 127 这个范围就直接返回数值
        //超过范围就直接new Integer(xx)
        Integer x = 128;
        Integer y = 128;
        System.out.println(x == y);
        //flase,超出范围
    }

(4).

看看下面代码,输出什么结果?为什么

public class f {
    public static void main(String[] args) {
        //示例一
        Integer i1=new Integer( 127 );
        Integer i2=new Integer( 127 );
        System.out.println(i1==i2);
        //示例二
        Integer i3=new Integer( 128 );
        Integer i4=new Integer( 128 );
        System.out.println(i3==i4);
        //示例三
        Integer i5=127;
        Integer i6=127;
        System.out.println(i5==i6);
        //示例四
        Integer i7=128;
        Integer i8=128;
        System.out.println(i7==i8);
        //示例五
        Integer i9=127;
        Integer i10=new Integer(127);
        System.out.println(i9==i10);
        //示例六
        Integer i11=127;
        int i12=127;
        System.out.println(i11==i12);
        //示例七
        Integer i13=128;
        int i14=128;
        System.out.println(i13==i14);
    }

FFTFFTT

(5).

String练习,输出是否正确

public class b {
    public static void main(String[] args) {
        String a = "qwq";
        String b =new String("qwq");
        System.out.println(a.equals(b));//t
        System.out.println(a==b);//f
        System.out.println(a==b.intern());//t
        //b.intern()方法,如果常量池中存在该字符串,返回该字符串在常量池中的地址
        //             如果不存在,则把该字符串添加到常量池中,再返回它的地址
        System.out.println(b==b.intern());//f

    }
}

(6).

String练习,输出是否正确

public class c {
    public static void main(String[] args) {
        String s1 = "qwq";
        String s2 = "java";
        String s4 = "java";
        String s3 = new String("java");
        System.out.println(s2 == s3);//f
        System.out.println(s2 == s4);//t
        System.out.println(s2.equals(s3)); //t
        System.out.println(s1 == s2);//f
    }
}

(7).

输出是否正确

public class e {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "qwq";
        Person p2 = new Person();
        p2.name = "qwq";
        System.out.println(p1.name.equals(p2.name));//T内容相等
        System.out.println(p1.name == p2.name);//T都指向常量池里的qwq
        System.out.println(p1.name =="qwq");//T qwq本来就是池里的,p1.name也指向池里的
        String s1 = new String("bcde");
        String s2 = new String("bcde");
        System.out.println(s1==s2);//F
    }
}
class Person{
    public String name;
}

(8).

以下语句创建了几个对象?画出内存图

String s1 = "hello";
s1="haha";

2个,都是字符串常量对象

String a = "hello"+"abc";

 1个,helloabc

String a ="hello"; //创建a对象
String b ="abc";//创建b对象
String c=a+b;//打断点,查看执行过程,进去,跳出,再进去,再跳出
String d="helloabc";
//c!=d

断点查看上面的执行过程 

(9).

下面代码输出什么,并说明原因

public class g {
    public static void main(String[] args) {
        String s1 = "qwq";//指向池中的qwq
        String s2 = "java";//指向池中的java
        String s5 = "qwqjava";//指向池中的qwqjava
        String s6 = (s1 + s2).intern();指向池中的qwqjava
        System.out.println(s5 == s6);//t
        System.out.println(s5.equals(s6));//t
    }
}

(10).

下面代码输出什么,并说明原因

public class h {
    String str = new String("qwq");
    final char[] ch = {'j', 'a', 'v', 'a'};
    public void change(String str, char ch[]) {
        str = "java";
        ch[0] = 'h';
    }
    public static void main(String[] args) {
        h ex = new h();
        ex.change(ex.str, ex.ch);
        System.out.println(ex.str + "and");//qwqand
        System.out.println(ex.ch);//hava
    }
}

内存分布可以看下面这个链接:

http://t.csdnimg.cn/SinUe

 ex.change(ex.str, ex.ch);解读

首先String str=ex.str;把ex的str属性赋给了change方法的str,把ex的ch属性赋给了change方法的ch。

然后,change方法中又把java赋给了str(change方法中的)。

所以,change方法中的str原先指向value,后来指向了常量池的java。

(11).

输出什么

public class lx {
    public static void main(String[] args) {
        String s=null;
        StringBuffer sb = new StringBuffer();
        sb.append(s);
        System.out.println(sb.length());//4
        System.out.println(sb);//null

        StringBuffer sb2 = new StringBuffer(sb);
        System.out.println(sb2);//null
        StringBuffer sb3 = new StringBuffer(s);//报错空指针异常
        System.out.println(sb2);
    }
}

 把空字符串追加进去不会报错

(12).

把12345.12变成12,345.12

public class lx2 {
    public static void main(String[] args) {
        String s1="1234567.12";
        StringBuffer sb1 = new StringBuffer(s1);
        for (int i = sb1.lastIndexOf(".")-3; i >0 ; i-=3) {
            sb1=sb1.insert(i,",");
        }
        System.out.println(sb1);

    }
}

(13).

自定义Book类,里面包含name和price。有一个 Book[ ]books = 4书对象。使用前面学习过的传递实现Comparator接口匿名内部类,也称为定制排序。给书排序,可以按照 price (1)从大到小(2)从小到大(3) 按照书名长度从大到小 。

public class c {
    public static void main(String[] args) {
        Book[] books = new Book[4];
        books[0]=new Book("红楼梦",100);
        books[1]=new Book("金瓶梅",90);
        books[2]=new Book("青年文献",5);
        books[3]=new Book("从入门到放弃",300);
        //1.price从小到大
        Arrays.sort(books, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Book book1=(Book) o1;
                Book book2=(Book) o2;
                double priceValue= book2.getPrice()-book1.getPrice();
                //double类型的,不符合返回值要求,转变成下面的
                if(priceValue>0){
                    return 1;//改为-1
                } else if (priceValue<0) {
                    return -1;//改为1,变成从小到大
                }else {
                    return 0;
                }
            }
        });

        //2.书名长度
//        Arrays.sort(books, new Comparator() {
//            @Override
//            public int compare(Object o1, Object o2) {
//                Book book1 = (Book) o1;
//                Book book2 = (Book) o2;
//                return book2.getName().length() - book1.getName().length();
//                //int类型的,符合返回值要求,不用转变
//            }
//        });

        System.out.println(Arrays.toString(books));
    }
}
class Book{
    private String name;
    private double price;
    public Book(String name,int price) {
        this.name= name;
        this.price = price;
    }

    public Book(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPrice(double price) {
        this.price = price;
    }
    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}

(14).

public class e1 {
    public static void main(String[] args) {
        String str="123456";
        try {
            str=reverse(str,1,1);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        System.out.println(str);
    }
    public static String reverse(String str,int start,int end){
        if(!(str!=null && start>=0 && end>start&&end<str.length())){
            throw new RuntimeException("参数错误");
        }
        char char1[]=str.toCharArray();
        char tepm=' ';
        for (int i = start,j=end; i<j ; i++,j--) {
            tepm=char1[i];
            char1[i]=char1[j];
            char1[j]=tepm;
        }
        return new String(char1);
    }
}

 (15).

//1.编写方法userRegister(String name,String pwd,String email)
//2.针对输入内容进行校验
public class e2 {
    public  static void main(String[] args) {
        Scanner sc=new Scanner(System.in);

        System.out.println("请输入用户名:");
        String s1=sc.next();
        System.out.println("请输入密码:");
        String s2=sc.next();
        System.out.println("请输入邮箱:");
        String s3=sc.next();
        try {
            userGister(s1,s2,s3);
            System.out.println("注册成功");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    public static  void userGister(String s1,String s2,String s3){

        if(!(s1.length()>=2 && s1.length()<=4) ){
            throw new RuntimeException("错误:用户名长度应为2,3,4位");
        }

        if(!(s2.length()==6 &&  isDigital(s2) )){
            throw new RuntimeException("错误:密码应该是6位数字");
        }

        int i=s3.indexOf('@');
        int j=s3.indexOf('.');
        if(!(i>0 && j>i)){
            throw new RuntimeException("错误:@开始,且有.");
        }
    }
    //判断是否全是数字
    public static boolean isDigital(String s2) {
        char[] chars = s2.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] < '0' || chars[i] > '9') {//askm值比较
                return false;
            }//里面这个循环都没有返回false,则就是正确的
        }
        return true;
    }
}

(16). 

 

public class e4 {
    public static void main(String[] args) {
        String s="aa";
        printName(s);
    }
    public static  void printName(String s){
        if(s==null){
            System.out.println("s 不能为空");
            return;
        }
        String[] name=s.split(" ");//按空格分割,存储到字符串数组中
        if (name.length!=3){
            System.out.println("输入的字符格式不对");
            return;
        }
        String format=String.format("%s,%s,%c",name[2],name[0],name[3].toUpperCase().charAt(0));
        //charAt(0)返回0位置的字符
        System.out.println(format);
    }
}

(17).

统计字符串中有几个大学字母,小写字母,数字

public class e5 {
    public static void main(String[] args) {
        String s="ssAA123";
        count(s);
    }
    public static void count(String s){
        if(s==null){
            System.out.println("0");
        }
        int numCount=0,lowCount=0,supCount=0;
        int m=s.length();
        for (int i = 0; i < m; i++) {
            if (s.charAt(i)>='0' && s.charAt(i)<='9'){
                numCount++;
            }
            if (s.charAt(i)>='a'&& s.charAt(i)<='z'){
                lowCount++;
            }
            if (s.charAt(i)>='A'&& s.charAt(i)<='Z'){
                supCount++;
            }
        }
        System.out.println(numCount);
        System.out.println(lowCount);
        System.out.println(supCount);
    }
}

(18).

(1).equals方法没有重写,还是比较对象

(2)."hello"+s1,会先在堆中创建一个StringBuilder对象,然后指向Hellohsp

(3).t1.inster()指的是堆中的地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1955402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DSP教学实验箱_数字图像处理操作_案例分享:5-13 灰度图像二值化

一、实验目的 学习灰度图像二值化的原理&#xff0c;掌握图像的读取方法&#xff0c;并实现在LCD上显示二值化前后的图像。 二、实验原理 图像二值化 图像的二值化处理就是将图像上的点的灰度置为 0 或 255&#xff0c;也就是将整个图像呈现出明显的黑白效果。即将 256 个亮…

JAVA零基础学习3(Scanner类,字符串,StringBuilder,StringJoinder,ArrayList成员方法)

JAVA零基础学习&#xff13; Scanner类输入示例代码代码解释完整代码1. 读取字符串2. 读取整数3. 读取浮点数4. 读取布尔值5. 读取单个单词6. 读取长整型数7. 读取短整型数8. 读取字节数注意事项总结 API 字符串解释示例解释解决方法示例&#xff1a;使用 StringBuilder String…

阻塞队列-PriorityBlockQueue

PriorityBlockingQueue 优先级队列不满足FIFO原则它将插入元素进行排序排序的实现是基于数组结构实现的二叉堆排序 二叉堆 在分析优先级别队列时候&#xff0c;需要了解一下二叉堆是什么 二叉堆是一种完全二叉树&#xff0c;除了最底层外&#xff0c;其它层被完全填充。二叉堆…

【AI学习指南】轻量级模型-用 Ollama 轻松玩转本地大模型

目录 探索 最小的AI模型 发现 其他轻量级模型 用 Ollama 轻松玩转本地大模型 本地大模型 Ollama 快速上手 安装 手动安装 下载ollama二进制文件 添加 Ollama 作为启动服务(推荐) 安装 CUDA 驱动程序(可选 - 适用于 Nvidia GPU) 安装 ROCm(可选 - 对于 Radeo…

飞腾2000+/64核芯片ECC功能验证

1、背景介绍 为了排查全国产飞腾计算模块的一个外场问题&#xff0c;需要验证飞腾2000/64核这个处理器的DDR控制器是否支持ECC功能&#xff0c;即在异常情况下能纠错。ECC纠错原理如下&#xff0c;目前飞腾2000/64 DDR控制器就是纠一检二&#xff1a; 2、寄存器说明 目前飞腾…

【学习过程总结】

一、二进制和十进制的转化 1、十进制转化为二进制 2、二进制转化为十进制 二进制转化为十进制这个&#xff0c;对于二进制的数&#xff0c;得从右往左看&#xff08;1《0《1《1&#xff09;。对于下面的转换过程得从下往上看 &#xff08;0、1、2、3&#xff09; 二、按位-异…

原理图----备份

从公司学到的电路图&#xff0c;做一个备份&#xff1a;

用Python做一个翻译软件,比上浏览器快100倍

简单的用Python来做一个翻译软件 开发环境 Python 3.10 Pycharm模块使用 requests -> pip install requests hashlib tkinter案例分为三部分: 1. 爬虫: 获取翻译接口, 请求获取翻译结果问题1: 接口抓包分析问题2: 请求需要写cookie问题3: 不同文本翻译, s加密参数2. 界面…

昇思25天学习打卡营第3天|基础知识-数据集Dataset

目录 环境 环境 导包 数据集加载 数据集迭代 数据集常用操作 shuffle map batch 自定义数据集 可随机访问数据集 可迭代数据集 生成器 MindSpore提供基于Pipeline的数据引擎&#xff0c;通过数据集&#xff08;Dataset&#xff09;和数据变换&#xff08;Transfor…

小模型狂飙!6家巨头争相发布小模型,Andrej Karpathy:大语言模型的尺寸竞争正在倒退...

过去一周&#xff0c;可谓是小模型战场最疯狂的一周&#xff0c;商业巨头改变赛道&#xff0c;向大模型say byebye~。 OpenAI、Apple、Mistral等“百花齐放”&#xff0c;纷纷带着自家性能优越的轻量化小模型入场。 小模型(SLM)&#xff0c;是相对于大语言模型&#xff08;LLM…

微信小游戏之三消(二)主要游戏控制方法

设计一个 game class。负责了游戏的核心控制逻辑&#xff0c;包括游戏状态管理、方块和道具的生成与效果处理&#xff0c;以及游戏的重新开始和复活流程。通过这些方法&#xff0c;脚本实现了游戏的基本玩法和用户交互。 主要游戏控制方法 gameStart()&#xff1a;开始游戏&am…

如何从网站获取表格数据

1.手动复制粘贴 最简单的方法是直接在网页上手动选择表格内容&#xff0c;然后复制粘贴到Excel或其他表格处理软件中。这种方法适用于表格较小且不经常更新的情况。 2.使用浏览器插件 有许多浏览器插件可以帮助从网页中提取表格数据&#xff0c;例如&#xff1a; -TableCapt…

liteos定时器回调时间过长造成死机问题解决思路

项目需求 原代码是稳定的&#xff0c;现我实现EMQ平台断开连接的时候&#xff0c;把HSL的模拟点位数据采集到网关&#xff0c;然后存入Flash&#xff0c;当EMQ平台连接的时候&#xff0c;把Flash里面的点位数据放在消息队列里面&#xff0c;不影响实时采集。 核心1&#xff1a…

【Linux】多线程4——线程同步/条件变量

1.Linux线程同步 1.1.同步概念与线程饥饿问题 先来理解同步的概念 什么是线程同步 在一般情况下&#xff0c;创建一个线程是不能提高程序的执行效率的&#xff0c;所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数&#xff0c;在多个线程同时对同一个内存地…

【文件fd】C++文件操作 | 详解系统调用接口文件操作 | 系统调用接口库函数

目录 1.回顾理解&引出问题 2.C文件操作 3.系统调用文件操作 3.0准备工作 3.1版本1☞open 3.2版本2☞文件权限 3.3版本3☞权限掩码 3.4版本3☞标记位传参 3.5版本4☞close 3.6版本5☞write 3.7flags选项 3.7.1 O_WRONLY | O_CREAT 3.7.2 O_WRONLY | O_CREAT …

Servlet详解(超详细)

Servlet详解 文章目录 Servlet详解一、基本概念二、Servlet的使用1、创建Servlet类2、配置Servleta. 使用web.xml配置b. 使用注解配置 3、部署Web应用4、处理HTTP请求和生成响应5、处理表单数据HTML表单Servlet 6、管理会话 三、servlet生命周期1、加载和实例化2、初始化3、 请…

Python爬虫入门02:Fiddler下载使用教程

文章目录 手机抓包全攻略&#xff1a;Fiddler 工具深度解析引言Fiddler 工具简介为什么选择 Fiddler&#xff1f; 安装与配置 Fiddler步骤一&#xff1a;下载与安装步骤二&#xff1a;配置浏览器代理步骤三&#xff1a;安装 HTTPS 证书 配置手机以使用 Fiddler步骤一&#xff1…

鸿蒙应用框架开发【OpenGL三棱椎】 NDK

OpenGL三棱椎 介绍 XComponent控件常用于相机预览流的显示和游戏画面的绘制,在HarmonyOS上&#xff0c;可以配合Native Window创建OpenGL开发环境&#xff0c;并最终将OpenGL绘制的图形显示到XComponent控件。本示例基于"Native C"模板&#xff0c;调用OpenGL(Open…

wpf中团队独立开发模块和左侧2个菜单的框架演示

此篇文章和上一篇文章wpf中开发独立模块功能和左侧1个菜单的框架演示-CSDN博客的结构是一样的&#xff0c;有1点不同的是&#xff0c;左侧有2层菜单&#xff0c;所以&#xff0c;就会更加的复杂。建议&#xff0c;先看明白上一篇的内容&#xff0c;再看这篇文章&#xff0c;否则…