package jp.co.nickel.online.account.common.util;
/**
* 画面表示ユーティリティクラス。<br>
* <br>
* 以下の機能を提供します。<br>
* <ul>
*
<li>「<,>,&,半角空白"」の変換</li>
* <li>改行コードの変換</li>
* <li>数値のカンマ編集</li>
* <li>金額の小数点編集</li>
* <li>String型の日付をYYYY/MM/DD形式で取得</li>
*
<li>String型の日付をYYYY年MM月DD日形式で取得</li>
* <li>西暦→和暦変換</li>
* <li>和暦→西暦変換</li>
* <li>半角カタカナを全角カタカナに変換</li>
* <li>特殊文字のエンコードを変換</li>
*
<li>文字列を指定桁数で改行したテキストを取得</li>
* </ul>
*/
public class UtilView {
/**
* デフォルトコンストラクタ。
*/
private UtilView(){
}
/**
*
特殊文字「<」「>」「&」「"」「半角空白」をHTML表示用に変換する。<br>
* <br>
* 引数が不正だった場合は null
を返します。<br>
* <br>
* @param data 変換前文字列
* @return String 変換後文字列
*/
public static String toHTMLEncode(String data){
// null チェック
if(UtilString.isNull(data))
return null;
// 文字列長を取得
int len = data.length();
// バッファ作成
StringBuffer fil = new StringBuffer(len);
// 変換
for(int i=0; i<len; i++){
char c = data.charAt(i);
switch (c){
case '<' :
fil.append("<");
break;
case '>' :
fil.append(">");
break;
case '"' :
fil.append(""");
break;
case '&' :
fil.append("&");
break;
case ' ' :
fil.append(" ");
break;
default :
fil.append(c);
break;
}
}
return fil.toString();
}
/**
*
改行コードを<BR>タグに変換する。<br>
* <br>
* 引数が不正だった場合は null
を返します。<br>
* <br>
* @param data 変換前文字列
* @return String 変換後文字列
*/
public static String toBreakTag(String data){
// null チェック
if(UtilString.isNull(data))
return null;
// 文字列長を取得
int len = data.length();
// 文字列長サイズのバッファを作成
StringBuffer fil = new StringBuffer(len);
for(int i=0; i<len; i++){
char c = data.charAt(i);
if(c == UtilConstants.C_BREAK_YEN_R){
i++;
c = data.charAt(i);
if (c == UtilConstants.C_BREAK_YEN_N){
fil.append(UtilConstants.S_TAG_BREAK);
}
//\r
だけ存在する場合はその値は切り捨てる
}else{
fil.append(c);
}
}
return fil.toString();
}
/**
* 数値 data にカンマを付加します。<br>
* <br>
*
小数点やマイナスの値をサポートします。<br>
* 引数が不正だった場合は null
を返します。<br>
* <br>
* @param data 変換前文字列
* @return String 変換後文字列
*/
public static String toCurNew(int data){
return toCurNew(String.valueOf(data));
}
/**
* 数値 data にカンマを付加します。<br>
* <br>
*
小数点やマイナスの値をサポートします。<br>
* 引数が不正だった場合は null
を返します。<br>
* <br>
* @param data 変換前文字列
* @return String 変換後文字列
*/
public static String toCurNew(String data){
// 先頭の 0 を取り除く
// データが不正だった場合は null が返ってくる
data = UtilString.cnvNumber(data);
// null チェック
if(UtilString.isNull(data))
return null;
int len = data.length();
int x = 0;
String buf = new String();
for(int i = 0; i < len; i++){
buf = buf + data.substring(i, i+1);
x++;
if ((len - x) % 3 == 0 && (len - x) != 0) {
buf = buf + UtilConstants.C_HALF_COMMA;
}
}
return buf;
}
/**
* 数値 data にカンマを付加します。<br>
* <br>
*
小数点やマイナスの値をサポートします。<br>
* 引数が不正だった場合は null
を返します。<br>
* <br>
* @param data 変換前文字列
* @return String 変換後文字列
*/
public static String toCur(String data){
// 先頭の 0 を取り除く
// データが不正だった場合は null が返ってくる
data = UtilString.cnvNumber(data);
// null チェック
if(UtilString.isNull(data))
return null;
int len = data.length();
int x = 1;
String buf = UtilConstants.S_EMPTY;
for(int i = len; i > 0; i--){
char c = data.charAt(i-1);
if(c == UtilConstants.C_HALF_PERIOD){
buf = UtilConstants.S_EMPTY;
for (int y=len; y>i; y--){
buf = data.charAt(y-1) + buf;
}
x = 0;
}
if(x == 3 && i-1 > 0 && c !=
UtilConstants.C_HALF_HYPHEN){
if(data.charAt(i-2) != UtilConstants.C_HALF_HYPHEN){
buf = UtilConstants.C_HALF_COMMA + c + buf;
x = 0;
}else{
buf = c + buf;
}
}else{
buf = c + buf;
}
x++;
}
return buf;
}
/**
* 数値 data にカンマを付加します。<br>
* <br>
*
小数点やマイナスの値をサポートします。<br>
* 引数が不正だった場合は null
を返します。<br>
* <br>
* @param data 変換前文字列
* @return String 変換後文字列
*/
public static String toCur(int data){
return toCur(String.valueOf(data));
}
/**
* 数値 data にカンマを付加します。<br>
* <br>
*
小数点やマイナスの値をサポートします。<br>
* 引数が不正だった場合は null
を返します。<br>
* <br>
* @param data 変換前文字列
* @return String 変換後文字列
*/
public static String toCur(float data){
return toCur(String.valueOf(data));
}
/**
* 数値 data にカンマを付加します。<br>
* <br>
*
小数点やマイナスの値をサポートします。<br>
* 引数が不正だった場合は null
を返します。<br>
* <br>
* @param data 変換前文字列
* @return String 変換後文字列
*/
public static String toCur(double data){
return toCur(String.valueOf(data));
}
/**
* 日付 data にフォーマットを適用します。<br>
* <br>
* data が4桁の場合は MM/dd
形式を適用します。<br>
* data が6桁の場合は yyyy/MM
形式を適用します。<br>
* data が8桁の場合は yyyy/MM/dd
形式を適用します。<br>
* data が14桁の場合は yyyy/MM/dd
形式を適用します。<br>
*
半角スラッシュ混合データもサポートします。<br>
* 引数が不正だった場合は null
を返します。<br>
* <br>
* @param data 変換前文字列
* @return String 変換後文字列
*/
public static String toDateE(String data){
// null チェック
if(UtilString.isNull(data))
return null;
// 有効データチェック
if(!UtilString.isValid(data))
return null;
//
スラッシュが入っている場合はスラッシュを取り除く
data = UtilString.replace(data, UtilConstants.S_SLASH,
UtilConstants.S_EMPTY);
switch(data.length()){
// 4桁の場合
case 4:
return data.substring(0, 2) + UtilConstants.S_SLASH +
data.substring(2, 4);
// 6桁の場合
case 6:
return data.substring(0,4) + UtilConstants.S_SLASH +
data.substring(4,6);
// 8桁の場合
case 8:
return data.substring(0,4) + UtilConstants.S_SLASH +
data.substring(4,6) + UtilConstants.S_SLASH + data.substring(6,8);
// 14桁の場合
case 14:
return data.substring(0,4) + UtilConstants.S_SLASH +
data.substring(4,6) + UtilConstants.S_SLASH + data.substring(6,8);
// それ以外の場合
default:
return null;
}
}
/**
* 日付 data にフォーマットを適用します。<br>
* <br>
* data が4桁の場合は MM月DD日
形式を適用します。<br>
* data が6桁の場合は YYYY年MM月
形式を適用します。<br>
* data が8桁の場合は YYYY年MM月DD日
形式を適用します。<br>
* data が14桁の場合は YYYY年MM月DD日
形式を適用します。<br>
*
半角スラッシュ混合データもサポートします。<br>
* 引数が不正だった場合は null
を返します。<br>
* <br>
* @param data 変換前文字列
* @return String 変換後文字列
*/
public static String toDateJ(String data){
// null チェック
if(UtilString.isNull(data))
return null;
// 有効データチェック
if(!UtilString.isValid(data))
return null;
//
スラッシュが入っている場合はスラッシュを取り除く
data = UtilString.replace(data, UtilConstants.S_SLASH,
UtilConstants.S_EMPTY);
switch(data.length()){
// 4桁の場合
case 4:
return data.substring(0,2) + UtilConstants.S_FULL_MONTH +
data.substring(2,4) + UtilConstants.S_FULL_DAY;
// 6桁の場合
case 6:
return data.substring(0,4) + UtilConstants.S_FULL_YEAR +
data.substring(4,6) + UtilConstants.S_FULL_MONTH;
// 8桁の場合
case 8:
return data.substring(0,4) + UtilConstants.S_FULL_YEAR +
data.substring(4,6) + UtilConstants.S_FULL_MONTH + data.substring(6,8) +
UtilConstants.S_FULL_DAY;
// 14桁の場合
case 14:
return data.substring(0,4) + UtilConstants.S_FULL_YEAR +
data.substring(4,6) + UtilConstants.S_FULL_MONTH + data.substring(6,8) +
UtilConstants.S_FULL_DAY;
default:
return null;
}
}
/**
* 文字列 data
中の特殊文字のエンコーディングを変換します。<br>
* <br>
* MS932(CP932) の UNICODE を SJIS(JIS)
に変換します。<br>
* 処理対象文字は以下の通りです。<br>
* <ul>
* <li>『~』</li>
* <li>『∥』</li>
* <li>『-』</li>
* <li>『¢』</li>
* <li>『£』</li>
* <li>『¬』</li>
* <li>『〓』</li>
* </ul>
* 上記の文字以外は変換しません。<br>
* 引数が不正だった場合は null
を返します。<br>
* <br>
* @param data 処理の対象の文字列
* @return result 変換後の文字列
*/
public static String cnvEncodingSJIS(String data) {
// null チェック
if(UtilString.isNull(data)){
return null;
}
StringBuffer result = new StringBuffer();
char cDest = 0x0000;
// 変換対象の文字列を文字数分調べる
for(int i = 0; i < data.length(); i++){
cDest = data.charAt( i );
switch( cDest ) {
case 0xff5e: // ~ [FULLWIDTH TILDE] -> [WAVE
DASH]
cDest = 0x301c;
break;
case 0x2225: // ∥ [PARALLEL TO] -> [DOUBLE
VERTICAL LINE]
cDest = 0x2016;
break;
case 0xff0d: // - [FULLWIDTH HYPHEN-MINUS] ->
[MINUS SIGN]
cDest = 0x2212;
break;
case 0xffe0: // ¢ [FULLWIDTH CENT SIGN] -> [CENT
SIGN]
cDest = 0x00a2;
break;
case 0xffe1: // £ [FULLWIDTH POUND SIGN] ->
[POUND SIGN]
cDest = 0x00a3;
break;
case 0xffe2: // ¬ [FULLWIDTH NOT SIGN] -> [NOT
SIGN]
cDest = 0x00ac;
break;
// 『〓』の場合は『=』へ変換する
case 0x3013: // 〓 [FULLWIDTH GETA MARK] ->
[Equal]
cDest = 0xff1d;
break;
}
result.append(cDest);
}
return result.toString();
}
/**
* 文字列 data
中の特殊文字のエンコーディングを変換します。<br>
* <br>
* SJIS(JIS) を MS932(CP932) の UNICODE
に変換します。<br>
* 処理対象文字は以下の通りです。<br>
* <ul>
* <li>『~』</li>
* <li>『∥』</li>
* <li>『-』</li>
* <li>『¢』</li>
* <li>『£』</li>
* <li>『¬』</li>
* <li>『〓』</li>
* </ul>
* 上記の文字以外は変換しません。<br>
* 引数が不正だった場合は null
を返します。<br>
* <br>
* @param data 処理の対象の文字列
* @return result 変換後の文字列
*/
public static String cnvEncodingUNICODE(String data) {
//引数nullチェック
if(UtilString.isNull(data)){
return null;
}
StringBuffer result = new StringBuffer();
char cDest = 0x0000;
// 変換対象の文字列を文字数分調べる
for(int i = 0; i < data.length(); i++){
cDest = data.charAt( i );
switch( cDest ) {
case 0x301c: // ~ [FULLWIDTH TILDE] -> [WAVE
DASH]
cDest = 0xff5e;
break;
case 0x2016: // ∥ [PARALLEL TO] -> [DOUBLE
VERTICAL LINE]
cDest = 0x2225;
break;
case 0x2212: // - [FULLWIDTH HYPHEN-MINUS] ->
[MINUS SIGN]
cDest = 0xff0d;
break;
case 0x00a2: // ¢ [FULLWIDTH CENT SIGN] -> [CENT
SIGN]
cDest = 0xffe0;
break;
case 0x00a3: // £ [FULLWIDTH POUND SIGN] ->
[POUND SIGN]
cDest = 0xffe1;
break;
case 0x00ac: // ¬ [FULLWIDTH NOT SIGN] -> [NOT
SIGN]
cDest = 0xffe2;
break;
// 『〓』の場合は『=』へ変換する
case 0x3013: // 〓 [FULLWIDTH GETA MARK] ->
[Equal]
cDest = 0xff1d;
break;
}
result.append(cDest);
}
return result.toString();
}
/**
* 文字列 data
を指定した桁で改行したテキストを取得します。<br>
* <br>
* 引数が不正の場合は null を返します。
* <br>
* @param data 基となる文字列
* @param size 桁
* @param br 改行コード(\n, \r\n, <br>
etc...)
* @return result 改行されたテキスト
*/
public static String getBreakText(String data, int size, String br){
// null チェック
if(UtilString.isNull(data) || UtilString.isNull(br))
return null;
// 桁チェック
if(size < 1)
return null;
StringBuffer result = new StringBuffer();
// 改行後のテキストの行数を取得
int line = data.length() / size;
// 最終行を加算
if(data.length() % size > 0)
line++;
// テキスト作成
for(int i = 0; i < line; i++){
if(i == line - 1){
result.append(data.substring(i * size,
data.length()));
}else{
result.append(data.substring(i * size, i * size +
size));
result.append(br);
}
}
return result.toString();
}
}