format方法是String类中的一个方法,主要作用是用来格式化字符串。当前做

的一个功能当中,刚好用到了这个方法,代码处理起来非常简便。因此就写篇博客

记录下来。

  分析使用场景:前端App需要根据不同的数据类型展示不同的文案信息,总共

分为六七种数据类型,而且每一种文案展示信息都需要动态组装时间和名称信息。比如

xxxx时间做了xxxx名称的事情。有两个地方需要进行信息的动态填充,其他固定的

文案信息也不相同,这个需求该怎么做的?

  确定解决方案:自己首先能够想到的就是使用StringBuilder进行拼接,因为使用

这个类不会创建过多的对象,效率也比较高。使用StringBuilder的缺点就是可能会有

很多的if/else,即使是使用switch语句,分支也会比较多。自己在想有没有什么更

简便的方法。无意中和同事聊天的时候,他提供一种方案,可以考虑使用String.format()

方法试试。

  开始开发:确定方案之后,自己首先使用if/else if/else的方式把代码写出来,不是太友好

看上去不雅观,不过先保证能使用。之后开始尝试使用同事推荐的新方法,写好之后发现代码

非常地简洁。最后还是打算采用新方案,使用String.format()的方式来做,然后在搭配一个枚举类,

在枚举类中可以定义多个值,第一个值可以定义未数据类型,第二个值可以定义为需要转换的字符串。

处理数据时,可以通过数据类型获取对应的枚举,然后获取到需要处理的字符串,最后通过

String.format()传入需要处理的字符串和处理的数据,这样简化下来之后,只剩下几行代码,并且

字符串是提前定义好的,效率也不会太差。示例如下,

public enum DataTypeEnum {

    DATA_TYPE_ONE("ONE", "%s的性别是%s, 籍贯为%s"),

    DATA_TYPE_TWO("TWO", "%s的性别是%s, 籍贯为%s"),

    DATA_TYPE_THREE("THREE", "%s的性别是%s, 籍贯为%s")

    ;

 

    /*

     * 替换内容

     */

    private String content;

 

    /*

     * 代码

     */

    private String code;

 

    public String code() {

        return this.code;

    };

 

    public String content() {

        return this.content;

    };

 

    /*

     * 枚举类的定义方式

     */

    DataTypeEnum(String code, String content){

        this.code = code;

        this.content = content;

    }

 

    public static DataTypeEnum fromValue(String value) {

        return MAPS.get(value);

    }

 

    private static final Map<String, DataTypeEnum> MAPS =

            Maps.uniqueIndex(Arrays.asList(DataTypeEnum.values()), DataTypeEnum::code);

}

 

测试代码如下:

public class StringTest {

 

    public static void main(String[] args) {

        String result = String.format("%s的性别是%s, 籍贯为%s", "小明", "", "广东深圳");

        System.out.println("result--->" + result);

    }

}

说明:测试代码中文案是一样的,真实项目中有多种不同类型的文案信息。可以根据实际需要来确定文案。

测试结果为

 

如果有更好建议的小伙伴,欢迎留言讨论。