数字字符串格式化

107 阅读3分钟

思路

  1. 问题理解:

    • 输入是一个数字字符串,可能包含前导零和小数部分。
    • 输出需要将整数部分每三位添加一个逗号,并保留小数部分。
  2. 数据结构选择:

    • 使用 BigDecimal 处理前导零和小数部分。
    • 使用 StringBuilder 来高效地构建结果字符串。
  3. 算法步骤:

    • 使用 BigDecimal 去除前导零。
    • 分割整数和小数部分。
    • 对整数部分进行千分位格式化。
    • 拼接整数和小数部分。

图解

假设输入为 "0000123456789.99"

  1. 去除前导零:

    • 使用 BigDecimal 转换为 123456789.99
  2. 分割整数和小数部分:

    • 整数部分:123456789
    • 小数部分:.99
  3. 格式化整数部分:

    • 从右向左每三位添加一个逗号:123,456,789
  4. 拼接结果:

    • 最终结果:123,456,789.99

知识总结

新知识点

  1. BigDecimal:

    • 用于精确的浮点数计算,特别适合处理货币等需要高精度的场景。
    • 可以去除前导零,确保数字的正确表示。
  2. tringBuilder:

    • 用于高效地构建字符串,特别是在需要频繁修改字符串内容时。
    • 学习建议

  • 理解数据结构:

    • 深入理解 BigDecimal 和 StringBuilder 的使用场景和优势。
    • 通过实际编程练习,掌握这些数据结构的基本操作。
  • 多做练习:

    • 通过豆包MarsCode AI刷题功能,多做类似的题目,加深对知识点的理解。
    • 尝试不同的解题思路,比较不同方法的优劣。

学习计划

import java.math.BigDecimal;

public class Main { public static String solution(String s) { // 使用BigDecimal去除前导零 BigDecimal bd = new BigDecimal(s); String number = bd.toPlainString();

    // 分割整数和小数部分
    String[] parts = number.split("\\.");
    String integerPart = parts[0];
    String decimalPart = parts.length > 1 ? "." + parts[1] : "";

    // 格式化整数部分,添加千分位逗号
    StringBuilder formattedIntegerPart = new StringBuilder();
    int len = integerPart.length();
    for (int i = 0; i < len; i++) {
        if (i > 0 && (len - i) % 3 == 0) {
            formattedIntegerPart.append(",");
        }
        formattedIntegerPart.append(integerPart.charAt(i));
    }

    // 拼接整数和小数部分
    return formattedIntegerPart.toString() + decimalPart;
}

public static void main(String[] args) {
    System.out.println(solution("1294512.12412").equals("1,294,512.12412"));
    System.out.println(solution("0000123456789.99").equals("123,456,789.99"));
    System.out.println(solution("987654321").equals("987,654,321"));
}

}

高效学习方法

  1. 制定刷题计划:

    • 每天固定时间刷题,保持持续性。
    • 根据难度逐步提升题目难度,从简单到复杂。
  2. 利用错题进行针对性学习:

    • 记录错题,分析错误原因。
    • 针对性地复习相关知识点,避免重复犯错。
  3. 总结与反思

    • 每完成一组题目,进行总结和反思。
    • 记录解题思路和遇到的困难,形成自己的知识库。

工具运用

结合其他学习资源

  1. AI刷题与文档结合:

    • 在刷题过程中,遇到不熟悉的知识点,及时查阅官方文档或相关教程。
    • 通过AI刷题功能快速验证理解是否正确。
  2. 社区交流:

    • 加入编程社区,与其他学习者交流心得。
    • 分享自己的解题思路,获取反馈和建议。
  3. 实践项目:

    • 将刷题中学到的知识应用到实际项目中。
    • 通过项目实践,加深对知识点的理解和应用能力。