Java 千分位,精确到指定位的正则实现
2010-05-25 13:39 by hackerzhou由于现在做的空间要支持默认值,用JSF实现的话得在后台对传入的默认值进行格式化后输出,写了一小段函数(其实是把昨天实现的在前台javascript中格式化的代码移植到java中)。
代码如下:
package main; import java.text.DecimalFormat; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { private static Pattern integerPattern = Pattern.compile("^-?[0-9]*$\r private static Pattern thousandsSeparatePattern = Pattern .compile("(\\\\d{1,3})(?=(\\\\d{3})+(?:$|\\\\D))\r public static void main(String[] args) { System.out.println(getFormatNumbers("123456.3", 2, ",")); System.out.println(getFormatNumbers("2545625.457", 4, "")); System.out.println(getFormatNumbers("2545625.457878", 4, "")); System.out.println(getFormatNumbers("0.457878", 4, "")); System.out.println(getFormatNumbers("57878", 3, ",")); System.out.println(getFormatNumbers(".57878", 3, ",")); } private static String getFormatNumbers(String value, int decimalPrecision, String thousandsSeparator) { System.out.print(value+" -> \r if (decimalPrecision > 0) { if (value == null || value.equals("")) { if (!Pattern.matches("^-?[0-9]*\\\\.{0,1}\\\\d{0," + decimalPrecision + "}$", value)) { value = "0"; } } String pattern = "0."; for (int i = 0; i < decimalPrecision; i++) { pattern += "0"; } value = new DecimalFormat(pattern) .format(Double.parseDouble(value)); String integerPart = value.split("\\\\.")[0]; String decimalPart = value.split("\\\\.")[1]; Matcher matcher = thousandsSeparatePattern.matcher(integerPart); integerPart = matcher.replaceAll("$1" + thousandsSeparator); value = integerPart + "." + decimalPart; } else { if (value == null || value.equals("")) { if (!integerPattern.matcher(value).find()) { value = "0"; } } Matcher matcher = thousandsSeparatePattern.matcher(value); value = matcher.replaceAll("$1" + thousandsSeparator); } return value; } }
运行结果如下:
123456.3 -> 123,456.30
2545625.457 -> 2545625.4570
2545625.457878 -> 2545625.4579
0.457878 -> 0.4579
57878 -> 57,878.000
.57878 -> 0.579