8.4学习苍穹外卖笔记

一、contains()方法

在全局异常捕捉器中使用了contains()方法

在Java中,contains()是一个方法,用于判断一个集合(Collection)或字符串(String)是否包含指定的元素或子字符串

对于集合

List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
 
System.out.println(numbers.contains(2));  // 输出为 true
System.out.println(numbers.contains(4));  // 输出为 false

对于字符串String

String str = "Hello, World!";
 
System.out.println(str.contains("Hello"));   // 输出为 true
System.out.println(str.contains("Java"));    // 输出为 false

二.split字符分割方法

1.split分割字符第一种方法是split(String x):x是字符串以x为分割的字符。
比如字符串a,c,d,e 若是以split(String “,”)分割那么会舍去,这个字符,然后返回字符数组[[a],[b],[c],[d]]

2.第二种方法split(String x,int n),x是要分割的字符,n是分割成几个字符数组。
比如字符串a,bc,d,e,f若是以split(String “,”,int 2)分割那么会返回字符数组大小为2,[[a],[bc,d,e,f]]

3.对于特殊字符的分隔| ^ $ * . ( ) \ /等都是正则表达式的一部分,只能通过前面加上\进行转义。注意\要用三个\\,也就是split(“\\”);
比如字符串a,bc,(d,e,f若是以split(String “\(”)分割那么会返回字符数组为[[a,bc,],[d,e,f]]

4.逐个分隔字符串。split(“”);里面是空,不是空格。
比如字符串a,b若是以split(String “”)分割那么会返回字符数组为[[a],[,],[b]]

5.同时使用多个分隔符进行分隔。split(“[xyz…]”)。想要x和y以及z三个都分割字符串咋办哪,之前提供的方法只有一个字符能够分割,那么这里提供了>=2个字符可以分割的方法直接传一个字符数组进去就可以了
比如字符串ca,bc,b,d,e,f若是以split(String “[bc]”)分割那么会返回字符数组为[[a,],[,],[,d,e,f]]

6.有时候需要多个空格隔开咋办哪java也提供了方法。split(" {1,}“).。注意是空格加{1,}。就是说以1个空格或者1个以上空格分隔。如果是用两个或者以上空格split(“ {2,}”)。
比如字符串a b c若是以split(String " {1,}”)分割那么会返回字符数组为[[a],[b],[c]]
                        
原文链接:https://blog.csdn.net/weixin_43613968/article/details/129388744

三、ThreadLocal

1.什么是ThreadLocal

2.查看当前线程id

System.out.println(" 当前线程的id:" +Thread.currentThread().getId() );

3.ThreadLocal常用方法

4.使用(只有同一线程的能访问到资源)

public class BaseContext {

    public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    public static void setCurrentId(Long id) {
        threadLocal.set(id);
    }

    public static Long getCurrentId() {
        return threadLocal.get();
    }

    public static void removeCurrentId() {
        threadLocal.remove();
    }

}

四、date时间获取

1.时间戳转换为标准时间格式

System.currentTimeMillis()//获取时间戳

获取标准时间可以使用 System.currentTimeMillis() 方法来获取,此方法优势是不受时区的影响,但是得到结果是时间戳的格式,如:

1543105352845 

过代码将时间戳转化为我们可以理解的格式:

SimpleDateFormat formater=new SimpleDateFormat()
Date date=new Date(System.currentTimeMillis())
System.out.print(formater.format(date))

则该时间戳对应的时间为:

2018-11-25 at 01:22:12 CET

2、  Java.util.Date

在Java中,获取当前日期最简单的方法之一就是直接实例化位于 Java 包 Java.util 的 Date 类。

System.out.println("第一种时间格式:时间为 " + new SimpleDateFormat().format(new Date()));
System.out.println("第二种时间格式:时间为  " + new SimpleDateFormat("yyyy-MM--dd HH:mm:ss").format(new Date()));

输出

第一种时间格式:时间为 2024/8/7 下午4:50
第二种时间格式:时间为  2024-08--07 16:50:05

注意:这里只想要日期可以把HH:mm:ss去掉,或者只要时间可以把yyyy-MM--dd去掉

3.Date/Time API

Java 8 提供了一个全新的 API ,用来替换 Java.util.Date 和 Java.util.Calendar。

Date/Time API 提供了多个类,帮助我们完成工作,包括以下内容:

  • LocalDate只获取日期
  •  LocalTime只获取时间
  •  LocalDateTime获取日期和时间
  •  ZonedDateTime

1.LocalDate

  • LocalDate localDate = LocalDate.now(); // get the current date
    System.out.println("localDate = " + localDate);
    
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");//转换格式
    System.out.println("使用另一种日期格式:"+localDate.format(dateTimeFormatter));

    输出:

  • localDate = 2024-08-07

  • 使用另一种日期格式:2024/08/07

2.LocalTime

//只输出时间
        LocalTime localTime = LocalTime.now(); // get the current time
        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("HH:mm:ss");
        System.out.println("只输出时间"+localTime.format(dateTimeFormatter1));

输出:

只输出时间17:35:20

五、DateTimeFormatter和SimpleDateFormat什么区别

(1)SimpleDateFormat

SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类,阿里java开发规范提到 的强制要求

1.SimpleDateFormat 是非线程安全类,在使用过程中可能会造成安全问题。多线程调用parse方法剖出的异常:

2.SimpleDateFormat  的不安全使用:如果多个线程使用同一个SimpleDateFormat 的对象进行日期和字符串的转化,则会有异常抛出。

3.所以如果使用SimpleDateFormat 在多线程下使用,则应该使用threadLocal,为每一个线程构造一个对象。这样就避免了多线程的竞争条件,从而可以安全使用。


原文链接:https://blog.csdn.net/m0_37948170/article/details/90176948

(2)DateTimeFormatter

DateTimeFormatter  的parse为何是线程安全的呢?由于它调用的parseResolved0 方法如下,可以看出这个方法的入参都是final 修饰的,不可变变量是线程安全的。

                        

  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值