刷题网址:豆包 MarsCode——智能编码,一触即发

题目

问题描述

小M在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。小M还发现,有时候输入的数字字符串前面会有无用的 0,这些也需要精简掉。请你帮助小M编写程序,完成这个任务。

测试样例

样例1:

输入:s = "1294512.12412"
输出:'1,294,512.12412'

样例2:

输入:s = "0000123456789.99"
输出:'123,456,789.99'

样例3:

输入:s = "987654321"
输出:'987,654,321'

解答

去除前导零

  • 使用 s.replaceFirst("^0+(?!$)", "") 来去除字符串 s 中的前导零。
  • ^0+(?!$) 是一个正则表达式,匹配字符串开头的 0,并且确保这些 0 不是字符串的唯一内容。
  • replaceFirst 方法返回一个新的字符串,因此需要将结果重新赋值给 s

再进行分离整数和小数部分,并进行千分位逗号的插入。

public class Main {
    public static String solution(String s) {
        s = s.replaceFirst("^0+(?!$)","");
        String[] parts = s.split("\\.");
        String integerPart = parts[0];
        String decimalPart = parts.length > 1 ? parts[1] : "";
        //格式化整数部分
        StringBuilder formattedIntegerPart = new StringBuilder();
        int count = 0;
        for(int i = integerPart.length()-1; i>=0; i-- ){
            formattedIntegerPart.append(integerPart.charAt(i));
            count++;
            if (count%3==0&&i!=0) {
                formattedIntegerPart.append(',');
            }
        }
        formattedIntegerPart.reverse();

        //合并整数和小数部分
        if(decimalPart.isEmpty()){
            return formattedIntegerPart.toString();
        }
        else{
            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"));
    }
}
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐