Java格式化类Format

news2024/11/15 21:35:21

文章目录

  • Format介绍
  • Format方法
    • - format(格式化)
    • - parseObject(解析)
  • 格式化分类
    • 日期时间格式化
      • 1. DateFormat
        • 常用方法
          • getInstance
          • getDateInstance
          • getTimeInstance
          • getDateTimeInstance
        • 方法入参
          • style
          • Locale
      • 2. SimpleDateFormat
        • 常用模式元素
        • 使用方法
          • 格式化
          • 解析
      • 3. ClassicFormat
    • 数字格式化
      • 1. NumberFormat
        • 常用方法
          • getInstance
          • getNumberInstance
          • getIntegerInstance
          • getPercentInstance
          • getCurrencyInstance
        • 方法示例
      • 2. DecimalFormat
        • 手动设置模式
        • 使用模式符号串
        • 使用方法
          • 格式化
          • 解析
      • 3. ChoiceFormat
        • 常用方法
          • nextDouble(double d)
          • nextDouble(double d, boolean positive)
          • previousDouble(double d)
          • ChoiceFormat(double[] limits, String[] formats)
          • ChoiceFormat(String newPattern)
            • 占位符
    • 字符串格式化
      • 1. MessageFormat
        • 模式元素
        • 格式化类型
        • 格式化样式
        • 使用示例
      • 2. String.format
        • format参数
          • 模块
          • 标识
          • 转换符


Format介绍

java.text.Format是Java格式化的抽象基类。主要用于将对象格式化为指定模式的字符串,或者将指定模式的字符串解析为对象。

Format方法

- format(格式化)

格式化:对象格式化为字符串。

  1. public final String format (Object obj)

    public final String format (Object obj) {
        return format(obj, new StringBuffer(), new FieldPosition(0)).toString();
    }
    

    一般使用此方法来将对象格式化为字符串,该方法为不可变方法,方法内部调用抽象方法的具体子类实现。

  2. public abstract StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos)
    抽象方法,子类必须实现该方法,定义子类自己具体的对象格式化为字符串的逻辑。

- parseObject(解析)

解析:字符串解析为对象。

  1. public Object parseObject(String source) throws ParseException

    public Object parseObject(String source) throws ParseException {
        ParsePosition pos = new ParsePosition(0);
        Object result = parseObject(source, pos);
        if (pos.index == 0) {
            throw new ParseException("Format.parseObject(String) failed",
                pos.errorIndex);
        }
        return result;
    }
    

    一般使用此方法来将字符串解析为对象,该方法为不可变方法,方法内部调用抽象方法的具体子类实现。

  2. public abstract Object parseObject (String source, ParsePosition pos)
    抽象方法,子类必须实现该方法,定义子类自己具体的字符串解析为对象的逻辑。

格式化分类

在这里插入图片描述

格式化分类格式化类描述
日期时间格式化DateFormat格式化日期时间的抽象类
SimpleDateFormatDateFormat的实现类,用于格式化和解析日期时间,非线程安全
ClassicFormatDateTimeFormatter的内部类,提供日期时间的格式化和解析
数字格式化NumberFormat格式化数字的抽象类
DecimalFormatNumberFormat的实现类,提供数字格式化和解析
ChoiceFormatNumberFormat的实现类,可以根据特定的值范围来选择相应的格式
字符串格式化MessageFormat用于字符串格式化的类。它可以将带有占位符的模板字符串和对应的参数值进行格式化
StringString类的format方法用于字符串的格式化

日期时间格式化

1. DateFormat

日期格式化抽象类,根据当前语言环境格式化日期和时间。

因为DateFormat是一个抽象类,所以不能直接new创建实例对象。但DateFormat提供了一些静态方法便于我们构建DateFormat子类的实例。

常用方法
getInstance

获取格式化的日期时间

  • getInstance():输出样式:22-8-30 下午4:14
getDateInstance

获取格式化的日期

方法描述
getDateInstance()输出样式:2022-8-30
getDateInstance(int style)指定样式
getDateInstance(int style, Locale aLocale)指定样式和语言环境
getTimeInstance

获取格式化的时间

方法描述
getTimeInstance()输出样式:16:14:32
getTimeInstance(int style)指定样式
getTimeInstance(int style, Locale aLocale)指定样式和语言环境
getDateTimeInstance

获取格式化的日期时间

方法描述
getDateTimeInstance()输出样式:2022-8-30 16:14:32
getDateTimeInstance(int dateStyle, int timeStyle)指定样式
getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)指定样式和语言环境
方法入参
style

设置输出样式。

DateFormat提供了多种输出样式:


    /**
     * 完整样式
     */
    public static final int FULL = 0;
    /**
     * 长样式
     */
    public static final int LONG = 1;
    /**
     * 中等样式
     */
    public static final int MEDIUM = 2;
    /**
     * 短样式
     */
    public static final int SHORT = 3;
    /**
     * 默认样式:中等样式
     */
    public static final int DEFAULT = MEDIUM;
样式输出格式(日期Date)输出格式(时间Time)
SHORT22-8-30下午4:03
MEDIUM
DEFAULT
2022-8-3016:03:06
LONG2022年8月30日下午04时03分06秒
FULL2022年8月30日 星期二下午04时03分06秒 CST
Locale

设置语言环境。

在这里插入图片描述

  • language:语言(zh:中文)
  • region:地区(CN:China)

2. SimpleDateFormat

SimpleDateFormat是DateFormat的一个具体实现类,是非线程安全的。

因为DateFormat直接支持的样式比较少,经常满足不了实际需求,于是SimpleDateFormat就来了,SimpleDateFormat提供了丰富的样式且可自定义样式。

在使用SimpleDateFormat的时候,需要通过字母来描述时间元素,并组装成想要的日期和时间模式。

常用模式元素

常用的日期时间元素和字母的对应表如下:

字母描述实例
G年代标志符(公元、公元前)AD、BC
y2015
Y周年2016
M年中的月份12
w年中的周数50
W月份中的周数02
D年中的天数344
d月份中的天数10
F月份中的星期02
E周中的天数(星期几)Thu
u周中的天数(第几天,星期一=1,星期日=7)1
aAM/PM标记AM、PM、上午、下午
H一天中的小时数(0~23)21
k一天中的小时数(1~24)21
KAM/PM中的小时数(0~11)09
hAM/PM中的小时数(1~12)09
m小时中的分钟数31
s分钟中的秒数08
S毫秒数716
z时区CST
Z时区(RFC 822标准时区)+0800
X时区(ISO 8601标准时区)+08

y与Y的区别:

  • YY是周年
  • yy是日历年,推荐使用y

举例:今天是2019年12月30日,日历年是 2019,但周年是 2020,因为本周是 2020 年的第 1 周。所以yy是19,而YY是20。

使用方法
格式化
public static void main(String[] args) throws ParseException {
    Date date = new Date();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("G yyyy-MM-dd HH:mm:ss S E z");
    String format = simpleDateFormat.format(date);
}

debug:
在这里插入图片描述

解析
public static void main(String[] args) throws ParseException {
        String str = "公元 2022-08-30 22:10:03 530 星期二 CST";
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("G yyyy-MM-dd HH:mm:ss S E z");
        Date date1 = (Date) simpleDateFormat.parseObject(str);
}

debug:
在这里插入图片描述

3. ClassicFormat

暂不分析。

数字格式化

1. NumberFormat

数字格式化抽象类,根据当前语言环境格式化数字。

NumberFormat是一个抽象类,不能直接new创建实例对象。NumberFormat提供了一些静态方法便于我们构建NumberFormat子类的实例。

常用方法
getInstance

获取格式化的常规数值

  • getInstance()
  • getInstance(Locale inLocale)
getNumberInstance

获取格式化的常规数值

  • getNumberInstance()
  • getNumberInstance(Locale inLocale)
getIntegerInstance

获取格式化的整型数值

  • getIntegerInstance()
  • getIntegerInstance(Locale inLocale)
getPercentInstance

获取格式化的百分比数值

  • getPercentInstance()
  • getPercentInstance(Locale inLocale)
getCurrencyInstance

获取格式化的指定语言环境的货币数值

  • getCurrencyInstance()
  • getCurrencyInstance(Locale inLocale)
方法示例
public static void main(String[] args) throws ParseException {
    NumberFormat instance = NumberFormat.getInstance();
    String format = instance.format(2.3);
    System.out.println("getInstance=====================" + format);
    NumberFormat integerInstance = NumberFormat.getIntegerInstance();
    String format1 = integerInstance.format(2.3);
    System.out.println("getIntegerInstance==============" + format1);
    NumberFormat percentInstance = NumberFormat.getPercentInstance();
    String format2 = percentInstance.format(2.3);
    System.out.println("getPercentInstance==============" + format2);
    NumberFormat currencyInstance = NumberFormat.getCurrencyInstance();
    String format3 = currencyInstance.format(2.3);
    System.out.println("getCurrencyInstance=============" + format3);
    NumberFormat currencyInstance1 = NumberFormat.getCurrencyInstance(Locale.US);
    String format4 = currencyInstance1.format(2.3);
    System.out.println("getCurrencyInstance(Locale.US)==" + format4);
}

控制台日志:

getInstance=====================2.3
getIntegerInstance==============2
getPercentInstance==============230%
getCurrencyInstance=============2.30
getCurrencyInstance(Locale.US)==$2.30

2. DecimalFormat

DecimalFormat是NumberFormat的一个具体子类,用于格式化十进制数字。

DecimalFormat能够分析和格式化任意语言环境中的数字:

  • 包括对西方语言、阿拉伯语和印度语数字的支持。
  • 支持整数 (123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)等。
  • 所有的内容都可以本地化(本地化:使用本地的语言环境)。

需要注意的是:DecimalFormat是非线程安全的。

DecimalFormat支持手动配置模式使用模式符号

手动设置模式
  • setMaximumFractionDigits(int newValue):设置小数部分中允许的最大数字位数
  • setMinimumFractionDigits(int newValue):设置小数部分中允许的最小数字位数,如果原数小数位数不够的话,会补零。
  • setGroupingSize(int i):设置分组中一组的位数(整数部分,默认3个数字为一组)。
  • setGroupingUsed(boolean value):设置是否使用分组,true表示使用,false表示取消分组
  • setMaximumIntegerDigits(int newValue):设置整数部分允许的最大数字位数
  • setMinimumIntegerDigits(int newValue):设置整数部分允许的最小数字位数
使用模式符号串
符号 位置是否本地化含义
0 数字 阿拉伯数字,位数不足时补0
#数字阿拉伯数字,位数不足时不管
.数字小数分隔符或货币小数分隔符
-数字减号
,数字分组分隔符
E数字分隔科学计数法中的尾数和指数
;子模式边界分隔正数和负数子模式
分号前是正常模式,分号后是负数输入的的输出前缀
- 如果输入为正数,输出:正常模式的结果
- 如果输入为正数,输出:负数的前缀+正常模式的结果的绝对值
%前缀或后缀乘以100并显示为百分数
\u2030前缀或后缀乘以1000并显示为千分数
¤(\u00A4)前缀或后缀货币记号,由货币符号替换。
如果同时出现两个该符号,则用国际货币符号替换。
如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。
'前缀或后缀用于在前缀或后缀中为特殊字符加引号,使特殊符号变为普通字符(如要创建单引号本身,请连续使用两个单引号)。
例如:"'#'#" 将123格式化为 "#123"
使用方法
格式化

① 手动配置模式

    public static void main(String[] args) throws ParseException {
        DecimalFormat decimalFormat = new DecimalFormat();
        decimalFormat.setGroupingUsed(true);// 使用分组
        decimalFormat.setGroupingSize(4);// 分组中一组的位数
        decimalFormat.setMinimumIntegerDigits(2);// 整数部分最小位数
        decimalFormat.setMaximumIntegerDigits(8);// 整数部分最大位数
        decimalFormat.setMinimumFractionDigits(2);// 小数部分最小位数
        decimalFormat.setMaximumFractionDigits(4);// 小数部分最大位数

        System.out.println(decimalFormat.format(1.11));// 01.11

        System.out.println(decimalFormat.format(11111.222));// 1,1111.222

        System.out.println(decimalFormat.format(11111111111.222222222222));// 1111,1111.2222
    }

② 使用模式符号串

    public static void main(String[] args){
        double pi = 3.1415926;

        // 取整数部分,整数部分不足2位补0
        System.out.println(new DecimalFormat("00").format(pi));// 03

        // 取整数部分和10位小数,整数部分不足2位补0,小数部分不足10位补0
        System.out.println(new DecimalFormat("00.0000000000").format(pi));// 03.1415926000

        // 取整数部分,整数部分不足2位不管
        System.out.println(new DecimalFormat("##").format(pi));// 3
        // ###和上面的##没区别
        System.out.println(new DecimalFormat("###").format(pi));// 3

        // 取整数部分和10位小数,整数部分不足2位不管,小数部分不足10位不管
        System.out.println(new DecimalFormat("##.##########").format(pi));// 3.1415926

        // 若输入为非负数,按;前面的正常模式输出
        // 若输入为负数,按;后面的(负数输入的输出前缀+正常模式输出的绝对值)输出
        System.out.println(new DecimalFormat("#.##;前缀").format(3.1415926));// 3.14
        System.out.println(new DecimalFormat("#.##;前缀").format(-3.1415926));// 前缀3.14

        // 百分比方式计数(百分号在末位),取整数部分和2位小数,小数部分不足2位不管
        System.out.println(new DecimalFormat("#.##%").format(pi));// 314.16%

        // 百分比方式计数(百分号在首位),取整数部分和2位小数,小数部分不足2位不管
        System.out.println(new DecimalFormat("%#.##").format(pi));// %314.16

        // 千分比方式计数(千分号在末位),取整数部分和2位小数,小数部分不足2位不管
        System.out.println(new DecimalFormat("#.##\u2030").format(pi));// 3141.59‰

        // 千分比方式计数(千分号在首位),取整数部分和2位小数,小数部分不足2位不管
        System.out.println(new DecimalFormat("\u2030#.##").format(pi));// ‰3141.59

        //显示为科学计数法,并取五位小数
        System.out.println(new DecimalFormat("#.#####E0").format(pi));// 3.14159E0

        //显示为两位整数的科学计数法,并取四位小数
        System.out.println(new DecimalFormat("00.####E0").format(pi));// 31.4159E-1

        //取整数部分,每三位以逗号进行分隔。
        System.out.println(new DecimalFormat(",###").format(pi));// 3

        // 添加货币符号在首位,如果同时出现两个该符号,则用国际货币符号
        System.out.println(new DecimalFormat("¤#.##").format(pi));// ¥3.14
        System.out.println(new DecimalFormat("\u00A4#.##").format(pi));// ¥3.14
        System.out.println(new DecimalFormat("¤¤#.##").format(pi));// CNY3.14

        // 添加货币符号在末位,如果同时出现两个该符号,则用国际货币符号
        System.out.println(new DecimalFormat("#.##¤").format(pi));// 3.14¥
        System.out.println(new DecimalFormat("#.##\u00A4").format(pi));// 3.14¥
        System.out.println(new DecimalFormat("#.##¤¤").format(pi));// 3.14CNY

        // 将特殊字符变为普通字符
        System.out.println(new DecimalFormat("''#.##").format(pi));// '3.14
        System.out.println(new DecimalFormat("#.##''").format(pi));// 3.14'
        System.out.println(new DecimalFormat("'#'#.##").format(pi));// #3.14
        System.out.println(new DecimalFormat("#.##'#'").format(pi));// 3.14#

        //将格式嵌入文本
        System.out.println(new DecimalFormat("圆周率π:#.##").format(pi));// 圆周率π:3.14
    }
解析

解析也可以手动配置模式或者使用模式符号串,这里只以使用模式符号串方式举例。

    public static void main(String[] args) throws ParseException {
        System.out.println(new DecimalFormat("圆周率π:#.##").parseObject("圆周率π:3.14"));// 3.14

        System.out.println(new DecimalFormat("#.##;前缀").parseObject("前缀3.14"));// -3.14

        System.out.println(new DecimalFormat("00.####E0").parseObject("31.4159E-1"));// 3.14159
    }

3. ChoiceFormat

ChoiceFormat将格式化运用到某个范围的数。

ChoiceFormat与其他Format类的不同之处在于,它使用构造函数放入方式(而不是使用getInstance样式工厂方法)创建ChoiceFormat对象。

注意:limits数组需要升序排列(否则结果会出错)

常用方法
nextDouble(double d)

查找大于d的最小double值,一般用在limits数组中,从而使limits数组形成一个右开区间数组

例如:limits = {0,1,ChoiceFormat.nextDouble(1)}

nextDouble(double d, boolean positive)
  1. positive=true,表示查找大于d的最小double值,一般用在limits数组中,从而使limits数组形成一个右开区间数组
  2. positive=false,表示查找小于d的最大double值,一般用在limits数组中,从而使limits数组形成一个左开区间数组
previousDouble(double d)

查找小于d的最大double值,一般用在limits数组中,从而使limits数组形成一个左开区间数组

public static void main(String[] args) {
	 System.out.println(ChoiceFormat.nextDouble(1));// 1.0000000000000002
	 System.out.println(ChoiceFormat.nextDouble(1,true));// 1.0000000000000002
	 System.out.println(ChoiceFormat.nextDouble(1,false));// 0.9999999999999999
	 System.out.println(ChoiceFormat.previousDouble(1));// 0.9999999999999999
}

上面三个方法的使用场景:

如果有个这样的需求:

  1. 当number < 1时,取值0
  2. 当1 <= number <= 2时,取值1
  3. 当2 < number <= 3时,取值2
  4. 当number > 3时,取值3

代码实现:

    double[] limits = {0, 1, 2, 3};
    String[] formats = {"0","1","2","3"};
    ChoiceFormat format = new ChoiceFormat(limits, formats);

如果这样的写法,显然不能满足:

  • number = 2时,取值1
  • number = 3时,取值2

我们可以这么写

public static void main(String[] args) {
    double[] limits = {0, 1, ChoiceFormat.nextDouble(2), ChoiceFormat.nextDouble(3)};
    String[] formats = {"0","1","2","3"};
    ChoiceFormat format = new ChoiceFormat(limits, formats);
    System.out.println(format.format(0));
    System.out.println(format.format(1));
    System.out.println(format.format(2));
    System.out.println(format.format(3));
    System.out.println(format.format(4));
}

在这里插入图片描述
能完全满足上面的需求(number = 2时,取值1;number = 3时,取值2)。

ChoiceFormat(double[] limits, String[] formats)

构造函数中接收一个formats数组和一个limits数组,这两个数组必须具有相同数量的元素。

  • 第一个数组是原始双精度数组,表示每个间隔的最小值(起始值)。
  • 第二个数组是一个字符串数组,代表与每个间隔关联的名称。

limits数组实际上是个区间,可开可闭,并且必须按升序排列,如果不按升序排列,格式化结果将会不正确,还可以使用\u221E(表示无穷大)。

匹配规则:limits[i] <= number <limits[i+1]

number表示使用format方法传入的值,i表示limit数组中的索引。当且仅当上述公式成立时,number匹配i,如果不能匹配,则会根据number是太小还是太大,匹配limits数组的第一个索引或最后一个索引,然后使用匹配的limits数组中的索引,去formats数组中寻找相同索引的值。

public static void main(String[] args) {
	double[] limits = {0, 1, 2, 3, 4, 5, 6};
	String[] formats = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };
	ChoiceFormat format = new ChoiceFormat(limits, formats);
	System.out.println(format.format(-1));// 星期一
	System.out.println(format.format(0));// 星期一
	System.out.println(format.format(1));// 星期二
	System.out.println(format.format(2.5));// 星期三
	System.out.println(format.format(6.6));// 星期日
	System.out.println(format.format(7));// 星期日
	System.out.println(format.format(8));// 星期日
}
namber取值范围匹配formats索引位置匹配值
number < 0匹配formats[0]星期一
0 <= number < 1匹配formats[0]星期一
1 <= number < 2匹配formats[1]星期二
2 <= number < 3匹配formats[2]星期三
3 <= number < 4匹配formats[3]星期四
4 <= number < 5匹配formats[4]星期五
5 <= number < 6匹配formats[5]星期六
numbe >= 6匹配formats[6]星期日
ChoiceFormat(String newPattern)

ChoiceFormat类的构造方法也允许我们传入一个模式字符串,format方法会根据这个模式字符串执行格式化操作。

模式元素的格式:doubleNum [占位符] formatStr

占位符
占位符描述
#等于
<大于
\u2264(<=)大于等于

注意:比较运算符和平时实现相反的,因为该地方类似于变量在比较运算符的右边(平时是在左边

模式字符串中的每个模式元素之间使用 | 分割,| 前后可以添加空格以美化代码。

其实在ChoiceFormat(String newPattern)构造方法的内部,模式字符串还是被转换为limits和formats两个数组。

public static void main(String[] args) {
	ChoiceFormat choice=new ChoiceFormat("1 # A | 2 < B | 3 \u2264 C | 5 # D");
	System.out.println(choice.format(0));
	System.out.println(choice.format(1));
	System.out.println(choice.format(2));
	System.out.println(choice.format(3));
	System.out.println(choice.format(4));
	System.out.println(choice.format(5));
	System.out.println(choice.format(6));
}

在这里插入图片描述

字符串格式化

1. MessageFormat

MessageFormat提供与语言环境无关的生成连接消息的方式。

通常用MessageFormat的静态方法format,该方法接收一个字符串的模式和一组对象(对象数组),按照模式形式将格式化的对象插入到模式中,然后返回字符串结果。

static String format(String pattern, Object … arguments)

  • pattern:字符串模式
  • arguments:对象数组
模式元素

模式元素格式:ArgumentIndex[,FormatType[,FormatStyle]]

  • ArgumentIndex:入参索引位置(从0开始)
  • FormatType:格式化类型
  • FormatStyle:格式化样式
格式化类型
  • date:调用DateFormat进行格式化
  • time:调用DateFormat进行格式化
  • number:调用NumberFormat进行格式化
  • choice:调用ChoiceFormat进行格式化
格式化样式
  • short
  • medium
  • long
  • full
  • integer
  • currency
  • percent
  • SubformatPattern(子模式)
使用示例
public static void main(String[] args) {
    Date date = new Date();
    System.out.println(MessageFormat.format("{0},{1},{2}", date, date, 1.11));
    System.out.println(MessageFormat.format("{0,date},{1,time},{2,number}", date, date, 1.11));
    System.out.println(MessageFormat.format("{0,date,MEDIUM},{1,time,MEDIUM},{2,number,integer},{3,number,#.#}", date, date, 1.11, 2.22));
}

输出:

22-9-5 下午10:47,22-9-5 下午10:47,1.11
2022-9-5,22:47:39,1.11
2022-9-5,22:47:39,1,2.2

2. String.format

String有两个格式化方法

  • format(String format, Object… args)
  • format(Locale l, String format, Object… args)
format参数

format参数格式:%[index$][flags][width][.precision]conversion

模块
模块是否必须描述
index$参数在参数列表中的位置,十进制整数。
第一个参数由 "1$" 引用,第二个参数由 "2$"引用
flags标识,用来控制输出格式
width输出的最小长度,正整数
.precision精度,限定输出字符数
conversion转换符,指定如何格式化参数
标识
标识描述
-在最小宽度内左对齐,不可与0标识一起使用
0若内容长度不足最小宽度,则在左边用0来填充
#对8进制和16进制,8进制前添加一个0,16进制前添加0x
+结果总包含一个+或-号
空格正数前加空格,负数前加-号
,只用与十进制,每3位数字间用,分隔
(若结果为负数,则用括号括住,且不显示符号
转换符
s字符串类型
c字符类型
b布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false
d整数类型(十进制)
x整数类型(八进制)
o整数类型(十六进制)
f浮点数型(十进制)。显示9位有效数字,且会进行四舍五入。如99.99
a浮点数型(十六进制)
g浮点数型(比%f,%a长度短些,显示6位有效数字,且会进行四舍五入)
e指数类型。如9.38e+5
h散列码
%百分比
tx日期与时间类型(x代表不同的日期与时间转换符)
n换行符

举例:

public static void main(String[] args) {
    System.out.println(String.format("%2$06.2f======%1$d", 2, 11.1111));// 011.11======2
}

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

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

相关文章

Redis入门与应用

目录 Redis的技术全景 两大维度 三大主线 Redis的版本选择与安装 Redis的linux安装 Redis的启动 默认配置 带参数启动 配置文件启动 操作 停止 Redis全局命令 键名的生产实践 Redis常用数据结构 字符串&#xff08;String&#xff09; 操作命令 set 设置值 g…

科技云报道:全球勒索攻击创历史新高,如何建立网络安全的防线?

科技云报道原创。 最简单的方式&#xff0c;往往是最有效的&#xff0c;勒索软件攻击就属于这类。 近两年&#xff0c;随着人类社会加速向数字世界进化&#xff0c;勒索软件攻击成为网络安全最为严重的威胁之一。今年以来&#xff0c;勒索软件攻击在全球范围内呈现快速上升态…

Day36力扣打卡

打卡记录 T 秒后青蛙的位置&#xff08;DFS&#xff09; 链接 class Solution:def frogPosition(self, n: int, edges: List[List[int]], t: int, target: int) -> float:g [[] for _ in range(n 1)]for x, y in edges:g[x].append(y)g[y].append(x)g[1].append(0)ans …

11.16~11.19绘制图表,导入EXCEL中数据,进行拟合

这个错误通常是由于传递给curve_fit函数的数据类型不正确引起的。根据你提供的代码和错误信息&#xff0c;有几个可能的原因&#xff1a; 数据类型错误&#xff1a;请确保ce_data、lg_data和product_data是NumPy数组或类似的可迭代对象&#xff0c;且其元素的数据类型为浮点数。…

系列二、Lock接口

一、多线程编程模板 线程 操作 资源类 高内聚 低耦合 二、实现步骤 1、创建资源类 2、资源类里创建同步方法、同步代码块 三、12306卖票程序 3.1、synchronized实现 3.1.1、Ticket /*** Author : 一叶浮萍归大海* Date: 2023/11/20 8:54* …

城市智慧路灯智能照明管理系统简介

城市路灯存在着开关灯控制方式单、亮灯时间不准确、巡查困难、故障处理不及时、亮灯率无法把控等问题&#xff0c;从而导致路灯系统能耗高&#xff0c;维护成本高。传统的路灯控制系统已无法满足智慧城市管理的需要&#xff0c;智能路灯照明控制系统从而得到广泛应用。 叁仟智…

基于安卓android微信小程序的好物分享系统

运行环境 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&a…

React整理总结(五、Redux)

1.Redux核心概念 纯函数 确定的输入&#xff0c;一定会产生确定的输出&#xff1b;函数在执行过程中&#xff0c;不能产生副作用 store 存储数据 action 更改数据 reducer 连接store和action的纯函数 将传入的state和action结合&#xff0c;生成一个新的state dispatc…

Azure 机器学习 - 搜索中的检索增强 (RAG)

目录 一、Azure AI 信息检索系统介绍二、采用 Azure AI 搜索的 RAG 方法三、适合 Azure AI 搜索的自定义 RAG 模式四、Azure AI 搜索中的可搜索内容五、Azure AI 搜索中的内容检索构建查询响应按相关性排名适用于 RAG 方案的 Azure AI 搜索查询的示例代码 六、集成代码和 LLM七…

时间序列预测实战(十七)PyTorch实现LSTM-GRU模型长期预测并可视化结果(附代码+数据集+详细讲解)

一、本文介绍 本文给大家带来的实战内容是利用PyTorch实现LSTM-GRU模型&#xff0c;LSTM和GRU都分别是RNN中最常用Cell之一&#xff0c;也都是时间序列预测中最常见的结构单元之一&#xff0c;本文的内容将会从实战的角度带你分析LSTM和GRU的机制和效果&#xff0c;同时如果你…

Three.js相机模拟

有没有想过如何在 3D Web 应用程序中模拟物理相机? 在这篇博文中,我将向你展示如何使用 Three.js和 OpenCV 来完成此操作。 我们将从模拟针孔相机模型开始,然后添加真实的镜头畸变。 具体来说,我们将仔细研究 OpenCV 的两个失真模型,并使用后处理着色器复制它们。 拥有逼…

电子学会C/C++编程等级考试2022年06月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:倒序输出 依次输入4个整数a、b、c、d,将他们倒序输出,即依次输出d、c、b、a这4个数。 时间限制:1000 内存限制:65536输入 一行4个整数a、b、c、d,以空格分隔。 0 < a,b,c,d < 108输出 一行4个整数d、c、b、a,整数之…

Java自动化驱动浏览器搜索稻香

下载最新的Chrome浏览器 查看chrome版本&#xff0c;在浏览器地址栏输入&#xff1a;chrome://version/ 下载对应的浏览器驱动&#xff0c;将其放到一个目录中&#xff0c;我放到了D:/chromedriver-win64 导入对应的依赖【注意&#xff1a;不要导入最新的版本&#xff0c;最…

算法 LeetCode 题解 | 两个数组的交集

大家好&#xff0c;我是木川 一、题目描述 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 示例…

C/C++最大质因子 2021年12月电子学会中小学生软件编程(C/C++)等级考试一级真题答案解析

目录 C/C最大质因子 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C最大质因子 一、题目要求 1、编程实现 质因子是指能整除给定正整数的质数。而最大质因子是指一个整数的所有质因子中最大的那个。…

【mediasoup】TransportCongestionControlClient 1: 代码走读

TransportCongestionControlClient 基于m77版本的libwebrtc ,但是TransportCongestionControlClient 并不是libwebrt中的,是mediasoup自己封装实现:TransportCongestionControlClient 用于发送端D:\XTRANS\soup\mediasoup-sfu-cpp\worker\src\RTC\TransportCongestionContro…

小黑子的SSM整合

SSM整合 一、基于restful页面数据交互1.1 后台接口开发1.2 页面访问处理 二、ssm整合2.1 流程分析2.2 整合配置2.3 功能模块开发2.4 接口测试2.5 表现层与前端数据传输协议定义2.5.1 协议实现 2.6 异常处理器2.6.1 RestControllerAdvice2.6.2 ExceptionHandler2.6.3 项目异常处…

DBeaver连接本地MySQL

原文&#xff1a; DBeaver21.3.0安装与连接本地MySQL_dbeaver创建本地数据库_傅大胖的博客-CSDN博客 其他&#xff1a; mysql 的驱动下载地址&#xff1a; Central Repository: mysql/mysql-connector-java ​​​​​​​

江湖再见,机器视觉兄弟们,我已经提离职了,聪明的机器视觉工程师,离职不亏本!

我闻江湖已叹息&#xff0c;又闻人间繁闹闹。同为布衣沦落人&#xff0c;相逢何必曾相识。 此生谁料事事休&#xff0c;道不尽人情冷暖&#xff0c;聚散离合总平常&#xff0c;不似勇气少年时。 我估计今年公司年底是发不出工资了&#xff0c;因为订单续不上。年终奖更是没有&…

Element Plus框架快速上手详解(一)

Element Plus框架快速上手详解 1、Element Plus1.1、安装 2、Button3、Link链接4、Layout布局5、Container布局容器6、Radio单选框6.1、单选框组6.2、事件 7、Checkbox多选框7.1、多选框组7.2、事件 8、Input输入框组件8.1、事件8.2、方法 9、Select选择器9.1、基础多选9.2、事…