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

本文仅供学习参考!

相关文章地址:

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/

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

前言

虽然System.out.println()适合调试和显示简单消息,但它不太适合格式化字符串。格式化字符串不仅显示字符串内容,而且还按照指定的顺序显示内容。例如,当显示像100000000这样的大整数时,您可能需要包含逗号,以便它显示为100,000,000。与小数类似,您可能希望显示特定的小数位数,例如199.53以及四舍五入。程序员会很高兴知道 Java 提供了一些格式化方法,并为各种数据类型(例如Double、Integer和Date)提供了充足的支持。

在 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 “类型字符” 结尾,它指示将要转换的数据类型(int、float等)以及数据的表示方式(十进制、十六进制 等) 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$引用,依此类推。这是一个格式化两个数据的程序:一个浮点数 和一个 字符串 :

        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() 方法由于其强大的多功能性而成为最常用的方法。从本地化、类型转换、宽度、对齐和填充,它都能满足要求!