最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 格式化輸出String.format() 示例解析

 更新時間:2025年12月24日 09:56:59   作者:Ahuuua  
String.format() 是Java中非常強大的工具,掌握它可以讓你在處理字符串輸出時事半功倍,本文給大家介紹Java格式化輸出String.format()的相關(guān)操作,感興趣的朋友跟隨小編一起看看吧

一、基本語法與結(jié)構(gòu)

1.1 核心語法

// 基礎(chǔ)語法
String formatted = String.format("格式字符串", 參數(shù)1, 參數(shù)2, ...);
// 等價寫法(推薦)
String formatted = "格式字符串".formatted(參數(shù)1, 參數(shù)2, ...); // Java 15+
System.out.printf("格式字符串", 參數(shù)1, 參數(shù)2, ...); // 直接打印

1.2 你的示例解析

double i = 3.1415926;
System.out.println(String.format("%.3f", i));  // 輸出: 3.142
  • %:格式說明符開始標(biāo)記
  • .3:精度控制,保留3位小數(shù)
  • f:格式類型,表示浮點數(shù)
  • i:要格式化的值

二、格式說明符詳解

格式說明符的完整結(jié)構(gòu):

%[參數(shù)索引$][標(biāo)志][寬度][.精度]轉(zhuǎn)換類型

2.1 轉(zhuǎn)換類型(必需)

轉(zhuǎn)換符適用類型說明示例
%d整數(shù)類型十進制整數(shù)"%d", 42"42"
%f浮點類型十進制浮點數(shù)"%.2f", 3.14159"3.14"
%s任意對象字符串"%s", "hello""hello"
%c字符Unicode字符"%c", 65"A"
%b布爾值true/false"%b", true"true"
%x整數(shù)十六進制"%x", 255"ff"
%o整數(shù)八進制"%o", 8"10"
%e浮點數(shù)科學(xué)計數(shù)法"%e", 1000.0"1.000000e+03"
%%-百分號本身"折扣: %d%%", 20"折扣: 20%"

2.2 寬度與精度

// 寬度:最小字符數(shù)(右對齊)
String.format("%5d", 42);     // "   42" (前面3個空格)
String.format("%-5d", 42);    // "42   " (左對齊,后面3個空格)
// 精度:對于浮點數(shù)控制小數(shù)位
String.format("%.2f", 3.14159);  // "3.14"
String.format("%.3f", 1.5);      // "1.500" (補零)
// 寬度和精度組合
String.format("%8.2f", 123.456); // "  123.46" (總寬8,2位小數(shù))

2.3 標(biāo)志(Flags)

標(biāo)志作用示例
-左對齊"%-10s", "hi""hi "
+顯示正負號"%+d", 42"+42"
0用零填充"%05d", 42"00042"
,千位分隔符"%,d", 1000000"1,000,000"
正數(shù)前加空格"% d", 42" 42"
(負數(shù)用括號"% (d", -42"(42)"

三、實際應(yīng)用示例

3.1 數(shù)字格式化

// 金融金額格式化
double price = 2999.99;
String.format("價格: ¥%,.2f", price);  // "價格: ¥2,999.99"
// 百分比顯示
double rate = 0.856;
String.format("成功率: %.1f%%", rate * 100);  // "成功率: 85.6%"
// 固定寬度表格數(shù)據(jù)
System.out.printf("%-10s %8s %8s%n", "商品", "單價", "數(shù)量");
System.out.printf("%-10s %8.2f %8d%n", "手機", 2999.99, 3);
System.out.printf("%-10s %8.2f %8d%n", "電腦", 5999.50, 1);

輸出:

商品           單價      數(shù)量
手機         2999.99        3
電腦         5999.50        1

3.2 字符串格式化

// 固定寬度對齊
String.format("|%-20s|", "左對齊");  // "|左對齊               |"
String.format("|%20s|", "右對齊");   // "|               右對齊|"
// 截斷字符串
String.format("%.5s", "Hello World");  // "Hello"
// 多參數(shù)格式化
String name = "張三";
int age = 25;
double score = 89.5;
String.format("學(xué)生: %s, 年齡: %d, 分?jǐn)?shù): %.1f", name, age, score);
// "學(xué)生: 張三, 年齡: 25, 分?jǐn)?shù): 89.5"

3.3 日期時間格式化

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
LocalDateTime now = LocalDateTime.now();
// 方式1:使用DateTimeFormatter(推薦)
String formatted1 = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
// 方式2:使用String.format
String formatted2 = String.format("%tF %tT", now, now);  // "2024-01-15 14:30:25"

常用日期格式符:

Date date = new Date();
String.format("%tY-%tm-%td", date, date, date);  // "2024-01-15"
String.format("%tH:%tM:%tS", date, date, date);  // "14:30:25"
String.format("%tA", date);                      // "星期一" (中文環(huán)境)

四、參數(shù)索引與重用

4.1 參數(shù)索引(1$表示第一個參數(shù))

// 重用參數(shù)
String.format("%1$s的分?jǐn)?shù)是%2$d,%1$s的年齡是%3$d", 
              "張三", 95, 20);
// "張三的分?jǐn)?shù)是95,張三的年齡是20"
// 改變參數(shù)順序
String.format("%3$s %2$s %1$s", "A", "B", "C");  // "C B A"

4.2 復(fù)雜示例:格式化表格

public class TableFormatter {
    public static void main(String[] args) {
        Object[][] data = {
            {"商品A", 29.99, 150},
            {"商品B", 159.50, 42},
            {"商品C", 9.99, 1000}
        };
        System.out.println("=".repeat(40));
        System.out.printf("%-15s %10s %10s%n", "商品名稱", "單價", "庫存");
        System.out.println("-".repeat(40));
        for (Object[] row : data) {
            System.out.printf("%-15s %10.2f %10d%n", 
                row[0], row[1], row[2]);
        }
        System.out.println("=".repeat(40));
    }
}

輸出:

========================================
商品名稱                單價        庫存
----------------------------------------
商品A                  29.99        150
商品B                 159.50         42
商品C                   9.99       1000
========================================

五、常見問題與解決方案

5.1 精度問題(浮點數(shù))

// 問題:浮點數(shù)精度誤差
double d = 0.1 + 0.2;  // 實際上是 0.30000000000000004
String.format("%f", d);  // "0.300000"
// 解決方案1:使用BigDecimal
import java.math.BigDecimal;
BigDecimal bd = new BigDecimal("0.1").add(new BigDecimal("0.2"));
String.format("%.2f", bd);  // "0.30"
// 解決方案2:使用DecimalFormat
import java.text.DecimalFormat;
DecimalFormat df = new DecimalFormat("#.##");
df.format(d);  // "0.3"

5.2 本地化支持

import java.util.Locale;
// 默認本地化
String.format(Locale.getDefault(), "%,.2f", 1234.56);
// 特定本地化(如美國)
String us = String.format(Locale.US, "%,.2f", 1234.56);  // "1,234.56"
// 特定本地化(如德國)
String de = String.format(Locale.GERMANY, "%,.2f", 1234.56);  // "1.234,56"
// 貨幣格式化
import java.text.NumberFormat;
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.CHINA);
nf.format(1234.56);  // "¥1,234.56"

5.3 性能優(yōu)化

// 大量格式化時重用Formatter
import java.util.Formatter;
StringBuilder sb = new StringBuilder();
try (Formatter formatter = new Formatter(sb)) {
    for (int i = 0; i < 10000; i++) {
        formatter.format("第%d行: %.2f%n", i, Math.random());
    }
}
String result = sb.toString();

六、實用技巧匯總

6.1 快速格式化方法

// Java 15+ 的便捷方法
String result = "姓名: %s, 分?jǐn)?shù): %.1f".formatted("李四", 95.5);
// 鏈?zhǔn)秸{(diào)用
String message = String.format("%s%n%s%n", "標(biāo)題", "-".repeat(20))
                   + String.format("值: %.2f", 123.456);

6.2 自定義格式化

// 自定義對象格式化
class Product {
    String name;
    double price;
    @Override
    public String toString() {
        return String.format("商品[%s] 價格:¥%.2f", name, price);
    }
}
Product p = new Product();
p.name = "手機"; p.price = 2999.99;
String.format("%s", p);  // "商品[手機] 價格:¥2999.99"

6.3 常見模式模板

public class FormatPatterns {
    // 文件名序號格式化
    public static String formatFileIndex(int index) {
        return String.format("file_%04d.txt", index);  // file_0001.txt
    }
    // 時間間隔格式化
    public static String formatDuration(long millis) {
        long hours = millis / 3600000;
        long minutes = (millis % 3600000) / 60000;
        long seconds = (millis % 60000) / 1000;
        return String.format("%02d:%02d:%02d", hours, minutes, seconds);
    }
    // 進度條顯示
    public static String formatProgress(double current, double total) {
        double percent = (current / total) * 100;
        return String.format("[%-50s] %.1f%%", 
            "=".repeat((int)(percent / 2)), percent);
    }
}

七、總結(jié)速查表

需求格式字符串示例
保留2位小數(shù)"%.2f"3.14159"3.14"
寬度10,右對齊"%10s""test"" test"
寬度10,左對齊"%-10s""test""test "
補零到5位"%05d"42"00042"
千位分隔符"%,d"1000000"1,000,000"
十六進制"%x"255"ff"
科學(xué)計數(shù)法"%e"1000"1.000000e+03"
多參數(shù)重用"%1$s %1$s""A", "B""A A"
日期時間"%tF %tT""2024-01-15 14:30:25"

最佳實踐建議

  1. 明確需求:先確定需要什么格式(小數(shù)位、對齊、千分位等)
  2. 測試邊界:測試0、負數(shù)、大數(shù)值等特殊情況
  3. 考慮本地化:如果是國際化應(yīng)用,使用Locale參數(shù)
  4. 性能考慮:大量格式化時考慮使用StringBuilder或Formatter
  5. 可讀性優(yōu)先:復(fù)雜的格式化考慮拆分成多行

String.format() 是Java中非常強大的工具,掌握它可以讓你在處理字符串輸出時事半功倍。從簡單的數(shù)字格式化到復(fù)雜的報表生成,這個工具都能勝任。

到此這篇關(guān)于Java 格式化輸出String.format() 詳解的文章就介紹到這了,更多相關(guān)Java String.format() 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

棋牌| 云南省| 无为县| 南乐县| 高阳县| 广灵县| 西昌市| 砚山县| 南丰县| 保康县| 曲阜市| 石城县| 沙坪坝区| 西昌市| 汉阴县| 临泉县| 汕头市| 灌南县| 慈溪市| 兴国县| 博兴县| 高州市| 洱源县| 陇川县| 榕江县| 泸水县| 通江县| 岐山县| 西乡县| 南充市| 师宗县| 昌都县| 夏津县| 彩票| 沐川县| 旌德县| 岢岚县| 镇安县| 浮山县| 南部县| 昌江|