你需要将一个不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。此外,输入的数字字符串可能会有前导零,这些前导零需要被去除。
数据结构选择
- 字符串:用于处理输入和输出。
- StringBuilder:用于高效地构建和修改字符串。
算法步骤
- 去除前导零:使用正则表达式或简单的字符串操作去除字符串前面的无用零。
- 分割整数和小数部分:使用
split方法将字符串分割成整数部分和小数部分。 - 格式化整数部分:从后向前遍历整数部分,每三位插入一个逗号。
- 合并整数和小数部分:将格式化后的整数部分和小数部分合并成最终结果。
具体步骤
-
去除前导零:
- 使用
replaceFirst方法和正则表达式^0+(?!$)去除前导零。
- 使用
-
分割整数和小数部分:
- 使用
split("\.")方法将字符串分割成整数部分和小数部分。
- 使用
-
格式化整数部分:
- 使用
StringBuilder从后向前遍历整数部分,每三位插入一个逗号。
- 使用
-
合并整数和小数部分:
- 将格式化后的整数部分和小数部分合并成最终结果。
通过这些步骤,你可以实现将不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。 `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 formattedInteger = new StringBuilder();
int count = 0;
for (int i = integerPart.length() - 1; i >= 0; i--) {
formattedInteger.append(integerPart.charAt(i));
count++;
if (count % 3 == 0 && i != 0) {
formattedInteger.append(",");
}
}
formattedInteger.reverse();
// 合并整数和小数部分
return formattedInteger.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"));
}
}
`