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
}