字符处理类

public class StringUtils {

	private StringUtils() {
	}

	/**
	 * nullと""を判定する。
	 * 
	 * @param str
	 *            チェックする項目
	 * @return nullと""の場合、trueを返す、以外の場合、falseを返す
	 */
	public static boolean isEmpty(String str) {
		return TextUtils.isEmpty(str);
	}

	/**
	 * 数字を(格式)文字列に変換する。<文字の最大桁数が指定しない><カンマ付け>
	 * 
	 * <pre>
	 * <b>例、</b>
	 * StringUtils.toFormatNumber(int, FormatType.NUMBER)
	 * StringUtils.toFormatNumber(int, FormatType.CURRENCY)
	 * StringUtils.toFormatNumber(int, FormatType.PERCENT)
	 * patternの種類:
	 * NUMBER式のフォーマット: 23323.666666666---->23,323.667 
	 * CURRENCY式のフォーマット: 23323.666666666---->¥23,323.67 
	 * PERCENT式のフォーマット:0.6666---->67%
	 * </pre>
	 * 
	 * @param cur
	 *            変換対象
	 * @param pattern
	 *            フォーマット種別
	 * @return 変換された数字
	 */
	public static String toFormatNumber(int cur, FormatType pattern) {

		return formatNumber(String.valueOf(cur), pattern, "0.0", false);
	}

	/**
	 * 数字を文字列に変換する。<文字の最大桁数が指定する><カンマ付け>
	 * 
	 * <pre>
	 * <b>例、</b>
	 * StringUtils.toFormatNumber(23323.666666666,FormatType.NUMBER,"5.4")
	 * StringUtils.toFormatNumber(23323.666666666, FormatType.CURRENCY,"5.4")
	 * StringUtils.toFormatNumber(23323.666666666, FormatType.PERCENT,"5.4")
	 * NUMBER式のフォーマット: 23323.666666666---->23,323.6667 
	 * CURRENCY式のフォーマット: 23323.666666666---->¥23,323.6667 
	 * PERCENT式のフォーマット: 23323.666666666---->2,332,367%
	 * </pre>
	 * 
	 * @param cur
	 *            変換対象
	 * @param pattern
	 *            フォーマット種別
	 * @param maxLengh
	 *            文字の最大桁数
	 * @return 変換された数字
	 */
	public static String toFormatNumber(int cur, FormatType pattern,
			String maxLengh) {

		return formatNumber(String.valueOf(cur), pattern, maxLengh, false);
	}

	/**
	 * 数字を文字列に変換する。<文字の最大桁数が指定する><カンマなし>
	 * 
	 * <pre>
	 * <b>例、</b>
	 * StringUtils.toFormatNumber(23323.666666666, FormatType.NUMBER,"5.4",true)
	 * StringUtils.toFormatNumber(23323.666666666, FormatType.CURRENCY,"5.4",true)
	 * StringUtils.toFormatNumber(23323.666666666, FormatType.PERCENT,"5.4",true)
	 * NUMBER式のフォーマット: 23323.666666666---->23323.6667 
	 * CURRENCY式のフォーマット:、 23323.666666666---->¥23323.6667 
	 * PERCENT式のフォーマット: 23323.666666666---->2332367%
	 * </pre>
	 * 
	 * @param cur
	 *            変換対象
	 * @param pattern
	 *            フォーマット種別
	 * @param maxLengh
	 *            文字の最大桁数
	 * @param isGroupingUsed
	 *            コンマの判定
	 * @return 変換された数字
	 */
	public static String toFormatNumber(int cur, FormatType pattern,
			String maxLengh, boolean isGroupingUsed) {

		return formatNumber(String.valueOf(cur), pattern, maxLengh,
				isGroupingUsed);
	}

	/**
	 * 数字を(格式)文字列に変換する。<文字の最大桁数が指定しない><カンマ付け>
	 * 
	 * <pre>
	 * <b>例、</b>
	 * StringUtils.toFormatNumber(string, FormatType.NUMBER)
	 * StringUtils.toFormatNumber(string, FormatType.CURRENCY)
	 * StringUtils.toFormatNumber(string, FormatType.PERCENT)
	 * patternの種類:
	 * NUMBER式のフォーマット: 23323.666666666---->23,323.667 
	 * CURRENCY式のフォーマット: 23323.666666666---->¥23,323.67 
	 * PERCENT式のフォーマット:0.6666---->67%
	 * </pre>
	 * 
	 * @param cur
	 *            変換前の文字
	 * @param pattern
	 *            フォーマット種別
	 * @return 変換された数字
	 */
	public static String toFormatNumber(String cur, FormatType pattern) {

		return formatNumber(cur, pattern, "0.0", false);
	}

	/**
	 * 数字を文字列に変換する。<文字の最大桁数が指定する><カンマ付け>
	 * 
	 * <pre>
	 * <b>例、</b>
	 * StringUtils.toFormatNumber("23323.666666666",FormatType.NUMBER,"5.4")
	 * StringUtils.toFormatNumber("23323.666666666", FormatType.CURRENCY,"5.4")
	 * StringUtils.toFormatNumber("23323.666666666", FormatType.PERCENT,"5.4")
	 * NUMBER式のフォーマット: 23323.666666666---->23,323.6667 
	 * CURRENCY式のフォーマット: 23323.666666666---->¥23,323.6667 
	 * PERCENT式のフォーマット: 23323.666666666---->2,332,367%
	 * </pre>
	 * 
	 * @param cur
	 *            変換前の文字
	 * @param pattern
	 *            フォーマット種別
	 * @param maxLengh
	 *            文字の最大桁数
	 * @return 変換された数字
	 */
	public static String toFormatNumber(String cur, FormatType pattern,
			String maxLengh) {

		return formatNumber(cur, pattern, maxLengh, false);
	}

	/**
	 * 数字を文字列に変換する。<文字の最大桁数が指定する><カンマなし>
	 * 
	 * <pre>
	 * <b>例、</b>
	 * StringUtils.toFormatNumber("23323.666666666", FormatType.NUMBER,"5.4",true)
	 * StringUtils.toFormatNumber("23323.666666666", FormatType.CURRENCY,"5.4",true)
	 * StringUtils.toFormatNumber("23323.666666666", FormatType.PERCENT,"5.4",true)
	 * NUMBER式のフォーマット: 23323.666666666---->23323.6667 
	 * CURRENCY式のフォーマット:、 23323.666666666---->¥23323.6667 
	 * PERCENT式のフォーマット: 23323.666666666---->2332367%
	 * </pre>
	 * 
	 * @param cur
	 *            変換前の文字
	 * @param pattern
	 *            フォーマット種別
	 * @param maxLengh
	 *            文字の最大桁数
	 * @param isGroupingUsed
	 *            コンマの判定
	 * @return 変換された数字
	 */
	public static String toFormatNumber(String cur, FormatType pattern,
			String maxLengh, boolean isGroupingUsed) {

		return formatNumber(cur, pattern, maxLengh, isGroupingUsed);
	}

	private static String formatNumber(String cur, FormatType pattern,
			String maxLengh, boolean isGroupingUsed) {

		if (isEmpty(cur) == true) {
			return "";
		}
		String str = "";
		double num = Double.parseDouble(cur);

		NumberFormat format;

		switch (pattern) {
		case NUMBER:
			format = NumberFormat.getNumberInstance();

			str = formatMaxLengh(format, maxLengh, num, isGroupingUsed, pattern);
			break;
		case CURRENCY:
			format = NumberFormat.getCurrencyInstance();

			str = formatMaxLengh(format, maxLengh, num, isGroupingUsed, pattern);
			break;
		case PERCENT:
			format = NumberFormat.getPercentInstance();

			str = formatMaxLengh(format, maxLengh, num, isGroupingUsed, pattern);
			break;
		default:
			break;
		}
		return str;

	}

	private static String formatMaxLengh(NumberFormat format, String maxLengh,
			double num, boolean isGroupingUsed, FormatType pattern) {

		int integer;
		int fraction;
		String[] str = maxLengh.split("\\.");
		integer = Integer.valueOf(str[0]);
		fraction = Integer.valueOf(str[1]);

		if (pattern != FormatType.PERCENT) {
			if (0 != integer) {
				format.setMaximumIntegerDigits(integer);
			}
			if (0 != fraction) {
				format.setMaximumFractionDigits(fraction);
			}
		}
		if (true == isGroupingUsed) {
			format.setGroupingUsed(false);
		}

		return format.format(num);
	}

	/**
	 * 金額は","を取り除く
	 * 
	 * <pre>
	 * <b>例、</b>
	 * delComma(1,234,567,890)-->1234567890
	 * </pre>
	 * 
	 * @param originalString
	 *            金額
	 * @return 変換した金額
	 */
	public static String delComma(String originalString) {
		if (isEmpty(originalString) == true) {
			return "";
		}

		String formatString = "";
		if (originalString != null && 1 <= originalString.length()) {
			formatString = originalString.replaceAll(",", "");
		}
		return formatString;
	}

	/**
	 * 文字を切り取る。
	 * <p>
	 * (目標文字が空と""の場合、空を戻る。 開始位置は目標文字列の桁数を超えている場合、空を戻る。 )
	 * <p>
	 * 
	 * <pre>
	 * <b>例、</b>
	 * encodingString("漢aaa",0,3)-->"漢aa"
	 * </pre>
	 * 
	 * @param originalString
	 *            目標文字
	 * @param startIndex
	 *            開始位置
	 * @param cutCount
	 *            切り取る数量
	 * @return 切り取る文字
	 */
	public static String subString(String originalString, int startIndex,
			int cutCount) {
		if (isEmpty(originalString) == true) {
			return "";
		}

		int end = startIndex + cutCount;
		int originalStringLength = originalString.length() - 1;

		if (originalStringLength < startIndex) {
			return "";
		}

		if (end <= originalStringLength) {
			return TextUtils.substring(originalString, startIndex, end);
		} else {
			return TextUtils.substring(originalString, startIndex,
					originalString.length());
		}
	}

	/**
	 * 左側から切り取る(切り取る桁数は目標文字列の桁数を超えている場合、目標文字列を戻る)
	 * 
	 * @param originalString
	 *            目標文字列
	 * @param cutCount
	 *            切り取る桁数
	 * @return 切り取る文字
	 */
	public static String getLeft(String originalString, int cutCount) {
		if (isEmpty(originalString) == true) {
			return "";
		}

		int originalStringLength = originalString.length();
		if (originalStringLength < cutCount) {
			return originalString;
		}

		return subString(originalString, 0, cutCount);
	}

	/**
	 * 右側から切り取る(切り取る桁数は目標文字列の桁数を超えている場合、目標文字列を戻る)
	 * 
	 * @param originalString
	 *            目標文字列
	 * @param cutCount
	 *            切り取る桁数
	 * @return 切り取る文字
	 */
	public static String getRight(String originalString, int cutCount) {
		if (isEmpty(originalString) == true) {
			return "";
		}

		int originalStringLength = originalString.length();
		if (originalStringLength < cutCount) {
			return originalString;
		}

		int startIndex = originalStringLength - cutCount;

		return subString(originalString, startIndex, cutCount);
	}

	/**
	 * 改行コードを戻る
	 * 
	 * @return 改行コード
	 */
	public static String newLine() {
		String lineSeparator = System.getProperty("line.separator");
		return lineSeparator;
	}

	/**
	 * 空を左側に埋め込みます。(totalWidthは目標文字列の桁数を超えている場合、目標文字列を戻る)
	 * 
	 * <pre>
	 * <b>例、</b>
	 * padLeft("a", 5)-->"    a"
	 * </pre>
	 * 
	 * @param orginalString
	 *            目標文字列
	 * @param totalWidth
	 *            結果として生成される文字列の文字数。これは、元の文字数と、埋め込み文字がある場合はその数を加えた数に等しくなります。
	 * @return 埋まった文字列
	 */
	public static String padLeft(String orginalString, int totalWidth) {

		return padLeft(orginalString, totalWidth, "");
	}

	/**
	 * 指定した キャラクターを左側に埋め込みます。(totalWidthは目標文字列の桁数を超えている場合、目標文字列を戻る)
	 * 
	 * <pre>
	 * <b>例、</b>
	 * padLeft("a", 5, "s")-->"ssssa"
	 * </pre>
	 * 
	 * @param orginalString
	 *            目標文字列
	 * @param totalWidth
	 *            結果として生成される文字列の文字数。これは、元の文字数と、埋め込み文字がある場合はその数を加えた数に等しくなります。
	 * @param paddingChar
	 *            埋め込み文字(首字母だけが有効である)
	 * @return 埋まった文字列
	 */
	public static String padLeft(String orginalString, int totalWidth,
			CharSequence paddingChar) {

		if (isEmpty(orginalString) == true) {
			orginalString = "";
		}
		orginalString = orginalString.trim();
		if (totalWidth <= orginalString.length()) {
			return orginalString;
		}

		char chr = ' ';
		if (0 < paddingChar.length()) {
			chr = paddingChar.charAt(0);
		}

		StringBuilder d = new StringBuilder(totalWidth);
		int fill = totalWidth - orginalString.length();

		for (int i = 0; i < fill; i++) {
			d.append(chr);
		}

		d.append(orginalString);
		return d.toString();
	}

	/**
	 * 空を右側に埋め込みます。(totalWidthは目標文字列の桁数を超えている場合、目標文字列を戻る)
	 * 
	 * <pre>
	 * * <b>例、</b>
	 * padRight("a", 5, "")-->"a    "
	 * </pre>
	 * 
	 * @param orginalString
	 *            目標文字列
	 * @param totalWidth
	 *            結果として生成される文字列の文字数。これは、元の文字数と、埋め込み文字がある場合はその数を加えた数に等しくなります。
	 * @return 埋まった文字列
	 */
	public static String padRight(String orginalString, int totalWidth) {
		return padRight(orginalString, totalWidth, "");
	}

	/**
	 * 指定した キャラクターを右側に埋め込みます。(totalWidthは目標文字列の桁数を超えている場合、目標文字列を戻る)
	 * 
	 * <pre>
	 * <b>例、</b>
	 * padRight("a", 5, "s")-->"assss"
	 * </pre>
	 * 
	 * @param orginalString
	 *            目標文字列
	 * @param totalWidth
	 *            結果として生成される文字列の文字数。これは、元の文字数と、埋め込み文字がある場合はその数を加えた数に等しくなります。
	 * @param paddingChar
	 *            埋め込み文字(首字母だけが有効である)
	 * @return 埋まった文字列
	 */
	public static String padRight(String orginalString, int totalWidth,
			CharSequence paddingChar) {

		if (isEmpty(orginalString) == true) {
			orginalString = "";
		}

		orginalString = orginalString.trim();
		if (totalWidth <= orginalString.length()) {
			return orginalString;
		}

		char chr = ' ';
		if (0 < paddingChar.length()) {
			chr = paddingChar.charAt(0);
		}

		StringBuilder d = new StringBuilder(totalWidth);
		int fill = totalWidth - orginalString.length();

		d.append(orginalString);

		for (int i = 0; i < fill; i++) {
			d.append(chr);
		}
		return d.toString();
	}
}
/**
 * Format类别
 * 
 * 
 */
public enum FormatType {
	/**
	 * 数字23323.666666666---->23,323.667
	 */
	NUMBER,
	/**
	 * 金額23323.666666666---->¥23,323.67
	 */
	CURRENCY,
	/**
	 * 百分比0.6666---->67%
	 */
	PERCENT
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值