Java核心 - 还在用+拼接字符串吗?(String.format详解)

作者:逍遥Sean
简介:一个主修Java的Web网站\游戏服务器后端开发者
主页:https://blog.csdn.net/Ureliable
觉得博主文章不错的话,可以三连支持一下~ 如有疑问和建议,请私信或评论留言!

前言
在 Java 中,String.format 是一个强大的工具,用于创建格式化的字符串。它不仅让我们可以控制字符串的格式,还能提高代码的可读性和维护性。本文将深入探讨 String.format 的用法,包括基本语法、格式化占位符、常见应用场景及最佳实践。

但不建议在for循环中用它拼接字符串,因为它的执行效率,比使用+号拼接字符串,或者使用StringBuilder拼接字符串都要慢一些。

不知道你有没有拼接过字符串,特别是那种有多个参数,字符串比较长的情况。

比如现在有个需求:要用get请求调用第三方接口,url后需要拼接多个参数。

以前我们的请求地址是这样拼接的:

String url = "http://susan.sc.cn?userName="+userName+"&age="+age+"&address="+address+"&sex="+sex+"&roledId="+roleId;

字符串使用+号拼接,非常容易出错。

后面优化了一下,改为使用StringBuilder拼接字符串:

StringBuilder urlBuilder = new StringBuilder("http://susan.sc.cn?");
urlBuilder.append("userName=")
.append(userName)
.append("&age=")
.append(age)
.append("&address=")
.append(address)
.append("&sex=")
.append(sex)
.append("&roledId=")
.append(roledId);

代码优化之后,稍微直观点。

但还是看起来比较别扭。

这时可以使用String.format方法优化:

String requestUrl = "http://susan.sc.cn?userName=%s&age=%s&address=%s&sex=%s&roledId=%s";
String url = String.format(requestUrl,userName,age,address,sex,roledId);

代码的可读性,一下子提升了很多。

我们平常可以使用String.format方法拼接url请求参数,日志打印等字符串。

1. 基本语法

String.format 方法
允许我们通过格式化字符串来生成最终的字符串输出。其基本语法如下:

String formattedString = String.format(String format, Object... args);
  • format:格式化字符串,其中包含一个或多个格式占位符。
  • args:一个或多个要格式化的参数,与格式占位符对应。

2. 格式化占位符

格式化占位符用于定义参数在字符串中的表现形式。格式化占位符的基本结构是:

%[flags][width][.precision]conversion

以下是一些常用的格式化占位符:

  • %d:格式化整数。
  • %f:格式化浮点数。
  • %s:格式化字符串。
  • %x:格式化十六进制整数。
  • %t:格式化日期和时间。
2.1 Flags(标志)

标志用于修改格式化输出的对齐方式和填充字符:

  • -:左对齐,默认右对齐。
  • +:显示正负号。
  • 0:用零填充,默认用空格填充。
String result = String.format("|%10d|%-10d|%010d|", 123, 123, 123);
// 输出: |        123|123       |0000000123|
2.2 Width(宽度)

宽度指定输出字段的最小宽度。如果实际值的宽度小于指定宽度,格式化输出将会填充空格(或其他字符)以满足宽度要求。

String result = String.format("|%5s|", "Java");
// 输出: | Java|
2.3 Precision(精度)

精度用于控制浮点数的小数位数或字符串的最大长度。

String result = String.format("|%.2f|", 123.456);
// 输出: |123.46|

String result2 = String.format("|%.5s|", "Hello, World!");
// 输出: |Hello|
2.4 Conversion(转换)

转换指定了如何将参数转换为字符串。常见的转换包括:

  • d:十进制整数。
  • f:浮点数。
  • s:字符串。
  • t:日期/时间。
String result = String.format("Integer: %d, Float: %.2f, String: %s", 42, 3.14159, "Hello");
// 输出: Integer: 42, Float: 3.14, String: Hello

3. 常见应用场景

3.1 日志记录

使用 String.format 可以生成结构化的日志消息,使日志输出更清晰易读:

int errorCode = 404;
String errorMessage = "Not Found";
String log = String.format("Error Code: %d - %s", errorCode, errorMessage);
// 输出: Error Code: 404 - Not Found
3.2 表格数据

在生成表格格式的数据时,String.format 可以帮助对齐数据列:

String header = String.format("|%-15s|%10s|", "Name", "Score");
String row = String.format("|%-15s|%10d|", "Alice", 90);
String table = header + "\n" + row;
// 输出:
// |Name           |      Score|
// |Alice          |        90|

4. 最佳实践

  1. 使用 String.format 来提高可读性:尽管 String.format 功能强大,但避免过度复杂的格式化字符串,以免降低代码的可读性。
  2. 避免频繁调用:在性能敏感的代码中,频繁使用 String.format 可能影响性能,可以考虑使用 StringBuilder
  3. 确保格式占位符与参数一致:不匹配的占位符和参数会导致 IllegalFormatException 异常。

5. 总结

String.format 是 Java 中强大而灵活的字符串格式化工具。通过理解其基本语法和常用格式化占位符,可以在代码中生成清晰、易读的格式化字符串。掌握这些技巧不仅能提升代码的可维护性,还能使输出结果更符合需求。

  • 15
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥Sean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值