day11-StringBuilder&Math&Arrays&包装类&日期时间类

Posted teayear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day11-StringBuilder&Math&Arrays&包装类&日期时间类相关的知识,希望对你有一定的参考价值。

day11-JAVAOOP

课程目标

1. 【理解】StringBuilder 类
2. 【掌握*】StringBuilder的使用
3. 【理解】Math类的使用
4. 【理解】Arrays类的使用
5. 【掌握*】包装类的使用
6. 【理解】BigInteger类和BigDecimal类的使用
7. 【掌握】Date类的使用
8. 【掌握*】SimpleDateFormat类的使用
9. 【理解】Calendr类的使用

B友https://www.bilibili.com/video/BV1QG4y1J76q?p=39

StringBuilder

StringBuilder类概述

String类是不可变的字符类,指的是地址。String s=“hello”; s=s+“a”,s是常量池,再增加拼接一个字符串a,还需要再次分配空间。

StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是 StringBuilder对象中的内容是可变的,也可称之为字符串缓冲类。

StringBuilder类的构造方法

方法名说明
public StringBuilder()创建一个空白可变字符串对象,不含有任何内容 16
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象,容量=字符串长度+16

代码演示

public class StringBuilderDemo01
    public static void main(String[] args)         
        StringBuilder sb = new StringBuilder();//16
        System.out.println(sb);//应该一个对象的地址值,一个空?
        System.out.println(sb.length());//0
        System.out.println(sb.capacity());//16
        System.out.println("-------------------------");
        // StringBuffer(int capacity)
        StringBuilder sb2 = new StringBuilder(4);//4
        System.out.println(sb2);
        System.out.println(sb2.length());   //0   有容量不一定有内容
        System.out.println(sb2.capacity());
        System.out.println("-------------------------");
        // StringBuffer(String str)
        StringBuilder sb3 = new StringBuilder("hello");
        System.out.println(sb3.length());//5 是内容的长度
        System.out.println(sb3.capacity());//5? 16? 5+16=21
        //扩充2*初始容量+2
    

StringBuilder类常见方法

添加方法

/*
 * StringBuffer的添加功能:
 * public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
 * public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
 */
public class StringBufferDemo 
	public static void main(String[] args) 
		// 创建字符串缓冲区对象
		StringBuffer sb = new StringBuffer();
		// 一步一步的添加数据
		// sb.append("hello");
		// sb.append(true);
		// sb.append(12);
		// sb.append(34.56);
		// 链式编程
		sb.append("hello").append(true).append(12).append(34.56);
		System.out.println("sb:" + sb);
		// public StringBuffer insert(int offset,String
		// str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
		sb.insert(5, "world");// helloworld
		System.out.println("sb:" + sb);
	

删除方法

/*
 * StringBuffer的删除功能
 * public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
 * public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
 */
public class StringBufferDemo 
	public static void main(String[] args) 
		// 创建对象
		StringBuffer sb = new StringBuffer();
		// 添加功能
		sb.append("hello").append("world").append("java");
		System.out.println("sb:" + sb);
		// public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
		// 需求:我要删除e这个字符,肿么办?
		 sb.deleteCharAt(1);
		// public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
		// 需求:我要删除world这个字符串,肿么办? 包左不包右 从0开始数
		 sb.delete(5, 10);//包左不包右
		// 需求:我要删除所有的数据
		sb.delete(0, sb.length());
		System.out.println("sb:" + sb);
	

替换方法

/*
 * StringBuffer的替换功能:
 * public StringBuffer replace(int start,int end,String str):从start开始到end用str替换
 */
public class StringBufferDemo 
	public static void main(String[] args) 
		// 创建字符串缓冲区对象
		StringBuffer sb = new StringBuffer();
		// 添加数据
		sb.append("hello");
		sb.append("world");
		sb.append("java");
		System.out.println("sb:" + sb);
		// public StringBuffer replace(int start,int end,String str):从start开始到end用str替换
		// 需求:我要把world这个数据替换为"节日快乐"
		sb.replace(5, 10, "节日快乐");
		System.out.println("sb:" + sb);
	

反转方法

/*
 * StringBuffer的反转功能:
 * public StringBuffer reverse()
 */
public class StringBufferDemo 
	public static void main(String[] args) 
		// 创建字符串缓冲区对象
		StringBuffer sb = new StringBuffer();
		// 添加数据
		sb.append("江小爱我");
		System.out.println("sb:" + sb);
		// public StringBuffer reverse()
		sb.reverse();
		System.out.println("sb:" + sb);
	

转换方法

方法名说明
public String toString()将StringBuilder转换为String
//创建对象
StringBuilder sb = new StringBuilder("Hello");
String str = sb.toString();

StringBuilder和String相互转换

  • StringBuilder转换为String

    public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String
  • String转换为StringBuilder

    public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder
  • 示例代码

    /*
        StringBuilder 转换为 String
            public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String
    
        String 转换为 StringBuilder
            public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder
     */
    public class StringBufferTest 
        public static void main(String[] args) 
            // String -- StringBuffer
            String s = "hello";
            // 注意:不能把字符串的值直接赋值给StringBuffer
            // StringBuffer sb = "hello";//错误
            // StringBuffer sb = s;//错误
            // 方式1:通过构造方法
            StringBuffer sb = new StringBuffer(s);
            System.out.println("sb:" + sb);
    
            // 方式2:通过append()方法 String -- StringBuffer
            StringBuffer sb2 = new StringBuffer();
            sb2.append(s);
            System.out.println("sb2:" + sb2);
            System.out.println("---------------");
            // 方式1:通过构造方法 StringBuffer -- String
            StringBuffer buffer = new StringBuffer("java");
            String str = new String(buffer);
            System.out.println("str:" + str);
    
            // 方式2:通过toString()方法  StringBuffer -- String
            String str2 = buffer.toString();
            System.out.println("str2:" + str2);
        
    
    

StringBuilder,StringBuffer和String区别

面试用

StringBuilder 所有的方法和StringBuffer方法都一样,把我们上面的StringBuilder都可以改成StringBuffe常用

A: String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。

B: StringBuffer是同步的,数据安全,效率低.方法前关键字synchronized。
C: StringBuilder是不同步的,数据不安全,效率高,单线程;

StringBuilder案例 TODO

字符串拼接案例

  • 案例需求

    定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。例如,数组为int[] arr = 1,2,3; ,执行方法后的输出结果为:[1, 2, 3]

  • 代码实现

    /*
        需求:
            定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。
            例如,数组为int[] arr = 1,2,3; ,执行方法后的输出结果为:[1, 2, 3]
        思路:
            1:定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
            2:定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回。
              返回值类型 String,参数列表 int[] arr
            3:在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
            4:调用方法,用一个变量接收结果
            5:输出结果
     */
    public class StringBuilderTest01 
        public static void main(String[] args) 
            //定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
            int[] arr = 1, 2, 3;
            //调用方法,用一个变量接收结果
            String s = arrayToString(arr);
            //输出结果
            System.out.println("s:" + s);
        
        //定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回
        /*
            两个明确:
                返回值类型:String
                参数:int[] arr
         */
        public static String arrayToString(int[] arr) 
            //在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
            StringBuilder sb = new StringBuilder();
            sb.append("[");
            for(int i=0; i<arr.length; i++) 
                if(i == arr.length-1) 
                    sb.append(arr[i]);
                 else 
                    sb.append(arr[i]).append(", ");
                
            
            sb.append("]");
            String s = sb.toString();
            return  s;
        
    
    

字符串反转案例

  • 案例需求

    定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果

    例如,键盘录入abc,输出结果 cba

  • 代码实现

    import java.util.Scanner;
    /*
        需求:
            定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果
            例如,键盘录入abc,输出结果 cba
        思路:
            1:键盘录入一个字符串,用 Scanner 实现
            2:定义一个方法,实现字符串反转。返回值类型 String,参数 String s
            3:在方法中用StringBuilder实现字符串的反转,并把结果转成String返回
            4:调用方法,用一个变量接收结果
            5:输出结果
     */
    public class StringBuilderTest02 
        public static void main(String[] args) 
            //键盘录入一个字符串,用 Scanner 实现
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个字符串:");
            String line = sc.nextLine();
            //调用方法,用一个变量接收结果
            String s = myReverse(line);
            //输出结果
            System.out.println("s:" + s);
        
        //定义一个方法,实现字符串反转。返回值类型 String,参数 String s
        /*
            两个明确:
                返回值类型:String
                参数:String s
         */
        public static String myReverse(String s) 
            //在方法中用StringBuilder实现字符串的反转,并把结果转成String返回
            //String --- StringBuilder --- reverse() --- String
            // StringBuilder sb = new StringBuilder(s);
            // sb.reverse();
            // String ss = sb.toString();
            // return ss;
    
           return new StringBuilder(s).reverse().toString();
        
    
    

Math类

Math类概述

`java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单。

3.2 Math类常用方法

方法名说明
Math.PI常量,圆周率
public static double abs(double num)取绝对值
public static double ceil(double num)向上取整
public static double floor(double num)向下取整
public static long round(double num)四舍五入
public static int max(int a, int b)求最大值
public static int min(int a, int b)求最小值
public static double pow(double a, double b)求a的b次幂
public static double random()随机数,随机的范围[0,1)

代码演示

public class MathDemo
    public static void main(String[] args)
        System.out.println(Math.abs(-5));//取绝对值值为5
        System.out.println(Math.abs(5));//取绝对值值为5

        System.out.println(Math.ceil(3.3));//向上取整值为 4.0
        System.out.println(Math.ceil(-3.3));//向上取整值为 ‐3.0
        System.out.println(Math.ceil(5.1));//向上取整值为 6.0

        System.out.println(Math.floor(3.3));//向下取整值为3.0
        System.out.println(Math.floor(-3.3));//向下取整值为‐4.0
        System.out.println(Math.floor(5.1));//向下取整值为 5.0

        System.out.println(Math.round(5.5));//四舍五入值为6.0
        System.out.println(Math.round(5.4));//四舍五入值为5.0
    

Arrays类

Arrays类概述

java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来非常简单。简单来说:Arrays这个是专门用来操作数组相关的工具类

Arrays类概述

方法名说明
public static String toString(int[] a)返回指定数组内容的字符串表示形式。
public static void sort(int[] a)对指定的int型数组按数字升序进行排序。

代码演示

public class ArraysDemo
    public static void main(String[] args) 
        // 定义int 数组
        int[] arr  =  2,34,35,4,657,8,69,9;
        // 打印数组,输出地址值
        System.out.println(arr); // [I@2ac1fdc4

        // 数组内容转为字符串
        String s = Arrays.toString(arr);
        // 打印字符串,输出内容
        System.out.println(s); // [2, 34, 35, 4, 657, 8, 69, 9]

        // 定义int 数组
        int[] arr  =  24, 7, 5, 48, 4, 46, 35, 11, 6, 2;
        System.out.println("排序前:"+ Arrays.toString(arr)); // 排序前:[24,7,5,48,4,46,35,11,6,2]
        // 升序排序
        Arrays.sort(arr);
        System.out.println("排序后:"+ Arrays.toString(arr));// 排序后:[2,4,5,6,7,11,24,35,46,48]
    

System类

System类概述

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中。常用的方法有:

方法说明
public static long currentTimeMillis()返回以毫秒为单位的当前时间。1秒=1000毫秒
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)将数组中指定的数据拷贝到另一个数组中。
public static void exit(int status)用来结束正在运行的Java程序。参数传入一个数字即可。通常传入0记为正常状态,其他为异常状态

currentTimeMillis方法

实际上,currentTimeMillis方法就是 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值

import java.util.Date;

public class SystemDemo 
    public static void main(String[] args) 
        System.out.println("我们喜欢江一燕");
        System.exit(0);
        System.out.println("我们也喜欢梅老师");

        System.out.println(System.currentTimeMillis());

        // 单独得到这样的实际目前对我们来说意义不大
        // 那么,它到底有什么作用呢?
        // 要求:请大家给我统计这段程序的运行时间
        long start = System.currentTimeMillis();
        for (int x = 0; x < 100000; x++) 
            System.out.println("hello" + x);
        
        long end = System.currentTimeMillis();
        System.out.println("共耗时:" + (end - start) + "毫秒");
    

arraycopy方法

以上是关于day11-StringBuilder&Math&Arrays&包装类&日期时间类的主要内容,如果未能解决你的问题,请参考以下文章

P6767 [BalticOI 2020/2012 Day0] Roses(贪心&gcd)

2017 济南精英班 Day1

DAY1

提高组刷题营 DAY 2

雅礼联考DAY01数列

关于复制构造函数和 NRVO