【Java】Java 中格式化字符串:String.format() 方法

news2024/11/15 23:23:43

本文仅供学习参考!

相关文章地址:

https://www.cnblogs.com/Dhouse/p/7776780.html

https://www.javatpoint.com/java-string-format

https://www.geeksforgeeks.org/java-string-format-method-with-examples/

format()

前言

虽然System.out.println()适合调试和显示简单消息,但它不太适合格式化字符串。格式化字符串不仅显示字符串内容,而且还按照指定的顺序显示内容。例如,当显示像100000000这样的大整数时,您可能需要包含逗号,以便它显示为100,000,000。与小数类似,您可能希望显示特定的小数位数,例如199.53以及四舍五入。程序员会很高兴知道 Java 提供了一些格式化方法,并为各种数据类型(例如DoubleIntegerDate)提供了充足的支持。
在 Java 中格式化字符串有三种主要方法。您可以使用**String.format()**方法、printf()方法或MessageFormat类来格式化字符串。其中,**String.format()**方法是最常用的,因此我们将在本 Java 编程教程中介绍它。我们将在以后的文章中讨论其他两个选项。

Java 中的 String.format() 方法语法

Java 的String.format()是一个静态方法,它使用给定的语言环境、格式String和参数返回格式化的**String 。**它有两种口味,如下:

public static String format(String format, Object... args)
public static String format(Locale locale, String format, Object... args)
  • **locale:格式化期间应用的区域设置。但是,如果它为空,**则不应用本地化。
  • format:要格式化的字符串
  • args :格式String中格式说明符引用的参数。如果参数多于格式说明符,则忽略多余的参数。参数的数量可以变化,并且可以完全省略。

以下是如何在 Java 中使用**String.format()**的示例:

class StringFormatExample {
  public static void main(String[] args) {
    String name = "Rob Gravelle";
    String str  = String.format("My name is %s", name);
    System.out.println(str); // My name is Rob Gravelle
  }
}

locale 参数对于根据给定区域设置的规则格式化数字和日期特别有用。例如,以下是“ France ”的区域设置值,根据法国数字系统,用逗号替换小数点:

import java.util.*;

class StringFormatLocaleExample {
  public static void main(String[] args) {
    System.out.format(
      Locale.FRANCE, 
      "The value of the float " + "variable is %f  ",
      10.3242342
    ); // The value of the float variable is 10,324234.
  }
}

Java 中的 String.format() 异常

您应该知道**String.format()**方法会引发几个异常:

  • NullPointerException :如果传递的String参数为null ,则抛出此异常。
  • IllegalFormatException:如果指定的格式非法或参数不足。

开发人员几乎从不捕获这些异常,因为它们往往表明方法使用不当,而不是某种预期的运行时异常。

在 Java 中格式化字符串宽度、对齐方式和填充

String.format ()方法还允许程序员设置格式化String宽度对齐方式填充。以下类包含每个示例以及各种组合:

public class StringFormatWidthAndPaddingExample {
  public static void main(String[] args) {
    String greeting = "Hi Rob";
    
    // Text width
    String.format("|%20s|", greeting);
    // |              Hi Rob|
    System.out.println(greeting);
    
    // Left justify text
    String.format("|%-20s|", greeting);
    // |Hi Rob              |
    System.out.println(greeting);
    
    // Maximum number of characters
    String.format("|%.3s|", greeting);
    // |Hi |
    System.out.println(greeting);
    
    // Max. characters with width
    String.format("|%20.3s|", greeting);
    // |                 Hi |
    System.out.println(greeting);
  }
}

使用 String.Format() 指定类型

正如我们在上面的 locale 参数示例中看到的,**String.format()**还可以用于将其他数据类型转换和格式化为字符串。为此,Java 提供了多种格式说明符。它们以百分号字符 ( % ) 开头,并以typechar类型字符”结尾,它指示将要转换的数据类型(intfloat等)以及数据的表示方式(十进制十六进制等) Java 中格式说明符的完整语法是:

% [flags] [width] [.precision] [argsize] typechar

我们可以在下面的程序中看到各种格式说明符如何影响数据的显示:

import java.util.Date;

public class StringFormatTypesExample {
  public static void main(String[] args) {
    String str1 = String.format("%d", 2112); // Integer value
    String str2 = String.format("%f", 98.7); // Float value
    String str3 = String.format("%x", 101);  // Hexadecimal value
    String str4 = String.format("%o", 023);  // Octal value
    String str5 = String.format("%tc", new Date()); // Date object
    String str6 = String.format("%c", 'Z');  // Char value
    
    System.out.println(str1); // 2112
    System.out.println(str2); // 98.700000
    System.out.println(str3); // 65
    System.out.println(str4); // 23
    System.out.println(str5); // Thu Jan 05 20:52:06 GMT 2023
    System.out.println(str6); // Z
  }
}

**以下是String.format()**方法的格式说明符的完整列表:

  • %% – 插入“ % ”符号
  • %x/%X – 十六进制整数
  • %t/%T – 时间和日期
  • %s/%S – 字符串
  • %n – 插入换行符
  • %o – 八进制整数
  • %f – 十进制浮点数
  • %e/%E – 科学记数法
  • %g – 导致格式化程序使用 %f 或 %e,以较短者为准
  • %h/%H – 参数的哈希码
  • %d – 十进制整数
  • %c – 字符
  • %b/%B – 布尔值
  • %a/%A – 浮点十六进制

请注意,某些说明符可能是小写大写。说明符的大小写决定了格式化字母的大小写。除此之外,无论大小写,执行的转换都是相同的。

参数索引和 String.format()

回想一下本教程前面的内容,String.format()可以接受多个要格式化的对象。参数索引是一个整数,指示参数在该对象列表中的位置。不要与String Replace()函数的编号组$1 2 ∗ ∗ 等)混淆, ∗ 参数索引 ∗ 将数字放在美元符号之前。因此,第一个参数由 ∗ ∗ 1 2**等)混淆,*参数索引*将数字放在美元符号之前。因此,第一个参数由**1 2等)混淆,参数索引将数字放在美元符号之前。因此,第一个参数由1引用,第二个参数由2$引用,依此类推。这是一个格式化两个数据的程序:一个浮点数和一个 字符串

public class StringFormatArgumentIndexExample {
  public static void main(String[] args) {
    String product = "Bread";
    double price = 4.99;
    
    String str = String.format("The price of %2$s is CAD $%1$.2f today.", price, product);
    
    // The price of Bread is CAD $4.99 today.
    System.out.println(str);
  }
}

END

尽管 Java 中有多种格式化字符串的方法,但**String.format()**方法由于其强大的多功能性而成为最常用的方法。从本地化、类型转换、宽度、对齐和填充,它都能满足要求!

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

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

相关文章

5 STM32复位和时钟控制

STM32的复位功能 系统复位: 系统复位将复位除时钟控制寄存器CSR中的复位标志和备份区域中的寄存器以外的所有寄存器为它们的复位数值。(按键复位和软件复位属于系统复位) 电源复位: 电源复位将复位除了备份区域外的所有寄存器。…

【Flink】DataStream API使用之转换算子(Transformation)

转换算子(Transformation) 数据源读入数据之后,就是各种转换算子的操作,将一个或者多个DataSream转换为新的DataSteam,并且Flink可以针对一条流进行转换处理,也可以进行分流或者河流等多流转换操作&#xf…

sql with子语句的理解

在用sqlite时,用到了with子语句,记录下对其的理解 目的:在1个字段中找到真正包含的数据,一般用于like,但该字段可能是复杂的字符串数组。 例子数据,如: 【E2806894200050010B93C473,123456】…

软件分享:Cpu-Z电脑CPU检测工具介绍(附下载)

目录 一、软件介绍 二、功能介绍 三、使用方法 1、通过 CPU-Z 查看 CPU 信息 2、缓存信息 3、主板信息 4、内存信息 5、内存规格信息(SPD) CPU是计算机中负责读取指令,对指令译码,并执行指令的核心部件。CPU自产生以来&am…

chatgpt赋能python:用Python计算BIM:优点、应用和结论

用Python计算BIM:优点、应用和结论 Building Information Modeling(BIM)是一种数字化的建筑设计和施工方法,它包括从建筑物的设计、施工到维护和拆除的整个生命周期。BIM在大规模工程建设中越来越受到欢迎,Python编程…

单片机强排热水器方案

单片机强排热水器方案 MCU型号 MM32SPIN05TW、MM32SPIN080C 产品概述 MM32SPIN05TW本产品使用高性能的ArmCortex-M0为内核的32位MCU,最高工作频率可达72MHz,内置高速存储器,丰富的I/O端口和外设连接到外部总线。本产品包含1个12位ADC、1个比…

【群智能算法改进】基于二次插值策略的改进白鲸优化算法 改进后的EBWO[3]算法【Matlab代码#44】

文章目录 【获取资源请见文章第5节:资源获取】1. 原始BWO算法2. 基于二次插值策略的EBWO算法3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 原始BWO算法 白鲸优化算法 (BWO,beluga whale optimization)…

宝塔SSL续签以及申请报CURL(7)与CURL(28)错误解决方案

说一下具体背景以及遇到的问题: 主要是网站的SSL过期以后,点击宝塔里的续签功能,弹出一个黑框,等超时后报以下错误 其中也尝试过很多方法,都没什么用,当然,如果报错信息不是这类情况&#xff…

3D开发工具HOOPS可构建PLM程序,数据共享更便捷

产品生命周期管理 (PLM) 解决方案实际上都是将制造生产系统粘合在一起的粘合剂,提供从头到尾的数字主线并为最终用户优化流程。 Tech Soft 3D不是构建 PLM 应用程序的专家,但却对构建领先应用程序所基于的组件技术,以及 SDK 如何提供必要的核…

MiniGPT-4原理解读——大模型论文阅读笔记三

论文:https://arxiv.org/pdf/2304.10592v1.pdf 代码:https://github.com/vision-cair/minigpt-4 一. 作者动机 GPT-4展示了非凡的多模态能力,比如直接从手写文本生成网站,以及识别图像中的幽默元素。这些特性在以前的视觉语言模…

Scrum敏捷看板工具在项目管理中的作用

Scrum是迭代式增量软件开发过程,是敏捷方法论中的重要框架之一,通常用于敏捷软件开发。 当开发团队在用 Scrum 这种开发方法开发项目时,可以利用敏捷看板,可视化透明且灵活的高效的完成工作。 使用敏捷看板可以使: …

ChatGPT批量生成文章软件:创意无限,助力高效创作

随着人工智能技术的不断发展,ChatGPT批量生成文章软件成为了一种强大的创作工具。这款软件以其无限创意和高效助力,极大地提升了文章创作的效率。在本文中,我们将从多个方面详细阐述ChatGPT软件的特点和优势。 一、智能创作能力 ChatGPT软件…

2023年5月青少年机器人技术等级考试理论综合试卷(一级)

青少年机器人技术等级考试理论综合试卷(一级)2023.6 分数: 100 题数: 45 一、 单选题(共 30 题, 共 60 分) 1.机器人的电源相当于人类的? ( ) A.大脑 B.皮肤 C.血管 D.心脏 标准答案…

赛效:如何将PDF文件转成图片

1:打开PDF文件,登录账号之后,点击“文档转换”里的“PDF转图片”。 2:在转换页面,点击“上传文件”,将电脑本地的PDF文件添加到页面上去。 3:在右侧图片分辨率下拉菜单里,选择自己需…

Vue3学习(三)前后端数据交互

一、前后端分离 IDEA软件、JDK1.8、Mysql5.7、Navicat、SpringBoot2.x pom配置阿里云仓库 <repositories><repository><id>nexus-aliyun</id><name>nexus-aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public/…

JavaWeb网络安全-弱口令自查

1.背景 项目中&#xff0c;创建用户没有校验密码强度&#xff0c;弱口令会导致一系列安全问题。然而用户表数据加密加盐&#xff0c;我们无法直接知道哪些用户使用了弱口令。 网络安全的首要步骤是检查系统中的弱口令。一旦网络攻击者获取了我们的弱口令并成功登录系统&#x…

利用MAP函数计算一系类数字的平方

1 问题 如何使用map函数计算一系列数字平方。 2 方法 通过使用定义函数&#xff08;add&#xff09;&#xff0c;创建一个list&#xff0c;包含这一系列数字&#xff0c;再使用map函数。 通过实验、实践等证明提出的方法是有效的&#xff0c;是能够解决开头提出的问题。 代码清…

linux更改 docker 为非 root 用户运行

首先创建docker用户组&#xff0c;如果docker用户组存在可以忽略 sudo groupadd docker把用户添加进docker组中 sudo gpasswd -a ${user} docker使用普通账户重启docker sudo service docker restart使用root用户修改/var/run/docker.sock权限 sudo chmod arw /var/run/doc…

【Flink】Flink 中的时间和窗口之水位线(Watermark)

1. 时间语义 这里先介绍一下什么是时间语义&#xff0c;时间语义在Flink中是一种很重要的概念&#xff0c;下面介绍的水位线就是基于时间语义来讲的。 在Flink中我们提到的时间语义一般指的是事件时间和处理时间&#xff1a; 处理时间(Processing Time)&#xff0c;一般指执…

git介绍和安装/git,github,gitee,gitlab区别/git使用流程/ git常用命令/git忽略文件

git介绍和安装 # 版本管理软件-1 对代码版本进行管理---》首页功能完成---》课程功能完成---》可以回退到某个版本-2 协同开发--》多人开发--》合并代码---》可能会有冲突&#xff0c;解决冲突# 版本管理软件&#xff1a;主流就两个-git&#xff1a;现在用的最多&#xff08;学…