• String.format() 拼接字符串


    一、前言

    不知道你有没有拼接过字符串,特别是那种有多个参数,字符串比较长的情况。
    比如现在有个需求:要用get请求调用第三方接口,url后需要拼接多个参数。
    以前我们的请求地址是这样拼接的:

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

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

    后面优化了一下,改为使用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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    代码优化之后,稍微直观点。但是看起来比较臃肿,这时可以使用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);
    
    • 1
    • 2

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

    建议:我们平常可以使用String.format方法拼接url请求参数,日志打印等字符串。但不建议在for循环中用它拼接字符串,因为它的执行效率,比使用+号拼接字符串,或者使用StringBuilder拼接字符串都要慢一些。

    二、String.format() 使用介绍

    String.format()函数相当于将括号内的量,按照自己的想要的格式拼接成一个字符串,然后输出。作用效果有点像C语言中的printf()函数。

    常用的转换符:
    在这里插入图片描述
    1、通用浮点数:

    比%f,%a长度更短的一种格式输出,显示6位有效数字,而且会进行四舍五入。

    2、散列码:

    不必用冗长的线性搜索技术来查找一个键,而是用一个特殊的值,名为“散列码”。散列码可以获取对象中的信息,然后将其转换成那个对象“相对唯一”的整数(int)。所有对象都有一个散列码。

    代码测试:

    public class StringFormatDemo {
        public static void main(String[] args)
        {
            //%s %c
            String str;
            str = String.format("Hello %s%c","world",'!');
            System.out.println(str);
            //%b
            str = String.format("%b", 10>3);
            System.out.println(str);
            str = String.format("%b", 2>=3);
            System.out.println(str);
            //%d %x %o
            str = String.format("十进制:%d", 10);
            System.out.println(str);
            str = String.format("十六进制:%x", 10);
            System.out.println(str);
            str = String.format("八进制:%o", 10);
            System.out.println(str);
            //%f %a %g %e
            str = String.format("浮点数:%f", 3.14159);
            System.out.println(str);
            str = String.format("十六进制浮点数:%a", 3.14159);
            System.out.println(str);
            str = String.format("通用浮点类型:%g", 3.1415926);
            System.out.println(str);
            str = String.format("指数形式:%e", 3.14159);
            System.out.println(str);
            //%h %% %n
            str = String.format("散列码:%h", "123456");
            System.out.println(str);
            str = String.format("百分之九十:%d%%", 90);
            System.out.println(str);
            str = String.format("测试到此结束!%n");
            System.out.println(str);
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    返回结果:

    Hello world!
    true
    false
    十进制:10
    十六进制:a
    八进制:12
    浮点数:3.141590
    十六进制浮点数:0x1.921f9f01b866ep1
    通用浮点类型:3.14159
    指数形式:3.141590e+00
    散列码:56760663
    百分之九十:90%
    测试到此结束!
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    常用标识:

    标识说明
    +使用正数表示正号,负数加不加无所谓,都可以表示出负号
    -左对齐,不够位数的地方补空格
    0在数字不够的地方补0
    空格在位数不够的地方补上空格
    ,对数字分组,三位一隔,只可以用于十进制
    (使用括号将去掉负号包含进来
    #让十六进制的数字加上ox,八进制的数字加上o,辅助%x和%o使用,相当于一种数字进制的补充说明提示
    <格式前一个转换符的参数

    代码测试:

    public class StringFormatDemo02 {
    
        public static void main(String[] args)
        {
            //+号的用法
            String str;
            str = String.format("数字的正负表示:%+d %d %+d %d",8,8,-8,-8);
            System.out.println(str);
            //-的用法
            str = String.format("左对齐:%-6d",8);
            System.out.println(str);
            //0的用法
            str = String.format("缺位补零:%06d",8);
            System.out.println(str);
            //' '空格的用法
            str = String.format("缺位补空格:% 6d",8);
            System.out.println(str);
            str = String.format("缺位补空格:% 6d",-8);
            System.out.println(str);
            //,的用法
            str = String.format("数字分组:%,d",123456789);
            System.out.println(str);
            //(的用法
            str = String.format("括号用法:%(d",-8888);
            System.out.println(str);
            str = String.format("括号用法:%(d",8888);
            System.out.println(str);
            //#的用法
            str = String.format("#括号用法(十六进制):%#x",12);
            System.out.println(str);
            str = String.format("#括号用法(八进制):%#o",12);
            System.out.println(str);
            //<的用法
            str = String.format("<括号用法:%f %<3.1f",3.14,3.2);
            //"%<3.1f"作用的对象是前一个"%f"所作用的对象
            System.out.println(str);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    返回结果:

    数字的正负表示:+8 8 -8 -8
    左对齐:8     
    缺位补零:000008
    缺位补空格:     8
    缺位补空格:    -8
    数字分组:123,456,789
    括号用法:(8888)
    括号用法:8888
    #括号用法(十六进制)0xc
    #括号用法(八进制)014
    <括号用法:3.140000 3.1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    简单入门编写html登录界面
    Java 实现分布式定时任务
    Abp6.0 使用 appsettings.json配置Serilog.Sinks.MariaDB
    阿里云服务器上配置Docker 以及常用命令讲解
    Python处理word的常用操作详解
    【ML on Kubernetes】第 11 章:Kubernetes 上的机器学习
    Mybatis || Mybatis-Plus中configuration和configLocation无法同时使用记录
    “银行家算法”大揭秘!在前端表格中利用自定义公式实现“四舍六入五成双”
    学会这招,轻松掌握学校教学质量!
    AWR1843+DCA1000+mmwave_studio 采集原始数据
  • 原文地址:https://blog.csdn.net/KevinChen2019/article/details/126339435