(正则表达式)数字字符串格式化(豆包Marscode 代码练习2)
小M在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。小M还发现,有时候输入的数字字符串前面会有无用的。,这些也需要精简掉。请你帮助小M编写程序,完成这个任务。再进行分离整数和小数部分,并进行千分位逗号的插入。
·
刷题网址:豆包 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"));
}
}更多推荐


所有评论(0)