1. 程式人生 > >Java給整數部分的字串加上千分位分隔符

Java給整數部分的字串加上千分位分隔符

本來想網上找個例子,結果讓人很失望,網上的大部分用的DecimalFormat 、NumberFormat,我隨便搞了一個長點的字串,發現大部分都有小數進度問題。

而且網上的人,都不測試的,寫的例子明顯不打算在生產上跑,所以還是自己寫了一個。

package com.test;

import java.text.ParseException;
import java.util.ArrayList;

public class FormatNumber {
	/**
	 * @Title: addThousandSeparator
	 * @Description: 格式化數字為千分位
	 * @param text
	 * @return 設定檔案,由於double的位數有限制,所以這裡自己拆分的方式來做。
	 * @return String 返回型別
	 */
	public static String addThousandSeparator(String text) {
		if (text == null) {
			return null;
		}
		int index = text.indexOf(".");
		if (index > 0) {
			String integerPartial = text.substring(0, index);
			String decimalPartial = text.substring(index);
			return addThousandSeparatorForInteger(integerPartial) + decimalPartial;
		} else {
			return addThousandSeparatorForInteger(text);
		}
	}

	// 只給整數加千分位分隔符
	public static String addThousandSeparatorForInteger(String text) {
		int index = text.indexOf(".");
		if (index != -1) {
			return text;
		} else {
			int length = text.length();
			ArrayList<String> stringContainer = new ArrayList<String>();
			while (length > 3) {
				stringContainer.add(text.substring(length - 3, length));
				length = length - 3;
			}
			stringContainer.add(text.substring(0, length)); // 將最前面的小於三個數字的也加入到陣列去
			StringBuffer buffer = new StringBuffer();
			for (int i = stringContainer.size() - 1; i >= 0; i--) {
				buffer.append(stringContainer.get(i) + ",");
			}
			buffer.deleteCharAt(buffer.length() - 1);
			return buffer.toString();
		}
	}

	public static void main(String[] args) throws ParseException {
		System.out.println(FormatNumber.addThousandSeparator(".331234567"));
		System.out.println("length:" + "1324678881122.331234567".length());
		System.out.println("index:" + "1324678881122.331234567".indexOf("."));
		System.out.println(FormatNumber.addThousandSeparator("1324678881122.331234567"));
		/**
		 * 結果如下: length:23 index:13 1,324,678,881,122.331234567
		 */

		System.out.println("length:" + "1324678881122.331234567".length());
		System.out.println("index:" + "1324678881122.331234567".indexOf("."));
		System.out.println(FormatNumber.addThousandSeparator("1324678881122"));
		System.out.println(FormatNumber.addThousandSeparator("324678881122"));
		System.out.println(FormatNumber.addThousandSeparator("22"));
		System.out.println(FormatNumber.addThousandSeparator(""));
		System.out.println(FormatNumber.addThousandSeparator(" "));
		System.out.println(FormatNumber.addThousandSeparator(".331234567"));
		System.out.println(FormatNumber.addThousandSeparator("0.331234567"));
		System.out.println(FormatNumber.addThousandSeparator(null));
	}

}