/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JTUStringUtil
*   ソースファイル名：JTUStringUtil.java
*   作成者          ：FJ
*   日付            ：2011年04月27日
*＜機能概要＞
*   電話手続共通文字列関連部品
*＜修正履歴＞
*   バージョン	修正日		修正者		修正内容
*   v3.00.00	2011/04/27	FJ) 楠神	新規作成
**	v4.00.00	2012/07/18	FJ)宮本		IT1-2012-0000259
**	v4.00.01	2012/10/02	FJ)宮本		IT1-2012-0001055
**	v4.00.02	2012/10/15	FJ)宮本		IT1-2012-0001209
*	v6.00.00	2014/01/07	FJ)黒田		ANK-1761-00-00
*
**********************************************************************/
package eo.common.util;

import eo.common.constant.JTUStrConst;

/**
 * 電話手続共通文字列関連部品<p>
 * <br>
 * @author FJ
 */
public class JTUStringUtil extends JPCCommonUtil 
{

	/** 
	 * 定数
	 */
	/** エスケープ文字 (")  */
	private static final String SINGLE_DBLQUOTE = "\"";
	/** ダミーの番地号  */
	private static final String DUMMY_BNCHIGO = "D";
	
	/** ダミーの変換文字 **/
	private static final String DMY = " ";

	/** 番地号の最小桁数 **/
	private static final int BNCHIGO_MIN_LEN = 5;
	
	/**
	 * 全角カナ用の文字列対応表
	 */
	private static final char[] ZENKAKU_KATAKANA = {
		'　', '、', '。', '，', '．', '・', '：', '；', '？', '！', '゛', '゜', '´', '｀', '¨'
		, '＾', '￣', '＿', 'ヽ', 'ヾ', 'ゝ', 'ゞ', '〃', '仝', '々', '〆', '〇', 'ー', '―', '‐', '／'
		, '＼', '〜', '‖', '｜', '…', '‥', '‘', '’', '“', '”', '（', '）', '〔', '〕', '［', '］'
		, '｛', '｝', '〈', '〉', '《', '》', '「', '」', '『', '』', '【', '】', '＋', '−', '±', '×'
		, '÷', '＝', '≠', '＜', '＞', '≦', '≧', '∞', '∴', '♂', '♀', '°', '′', '″', '℃', '￥'
		, '＄', '¢', '£', '％', '＃', '＆', '＊', '＠', '§', '☆', '★', '○', '●', '◎', '◇'
		, '◆', '□', '■', '△', '▲', '▽', '▼', '※', '〒', '→', '←', '↑', '↓', '〓'
		, '∈', '∋', '⊆', '⊇', '⊂', '⊃'
		, '∪', '∩', '∧', '∨', '¬', '⇒', '⇔', '∀'
		, '∃', '∠', '⊥', '⌒', '∂'
		, '∇', '≡', '≒', '≪', '≫', '√', '∽', '∝', '∵', '∫', '∬'
		, 'Å', '‰', '♯', '♭', '♪', '†', '‡', '¶', '◯'
		, '０', '１', '２', '３', '４', '５', '６', '７', '８', '９'
		, 'ァ', 'ア', 'ィ', 'イ', 'ゥ', 'ウ', 'ェ', 'エ', 'ォ', 'オ', 'カ', 'ガ', 'キ', 'ギ', 'ク'
		, 'グ', 'ケ', 'ゲ', 'コ', 'ゴ', 'サ', 'ザ', 'シ', 'ジ', 'ス', 'ズ', 'セ', 'ゼ', 'ソ', 'ゾ', 'タ'
		, 'ダ', 'チ', 'ヂ', 'ッ', 'ツ', 'ヅ', 'テ', 'デ', 'ト', 'ド', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ'
		, 'バ', 'パ', 'ヒ', 'ビ', 'ピ', 'フ', 'ブ', 'プ', 'ヘ', 'ベ', 'ペ', 'ホ', 'ボ', 'ポ', 'マ', 'ミ'
		, 'ム', 'メ', 'モ', 'ャ', 'ヤ', 'ュ', 'ユ', 'ョ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ヮ', 'ワ'
		, 'ヰ', 'ヱ', 'ヲ', 'ン', 'ヴ', 'ヵ', 'ヶ'
		, 'Ａ', 'Ｂ', 'Ｃ', 'Ｄ', 'Ｅ', 'Ｆ', 'Ｇ', 'Ｈ', 'Ｉ', 'Ｊ', 'Ｋ', 'Ｌ', 'Ｍ', 'Ｎ'
		, 'Ｏ', 'Ｐ', 'Ｑ', 'Ｒ', 'Ｓ', 'Ｔ', 'Ｕ', 'Ｖ', 'Ｗ', 'Ｘ', 'Ｙ', 'Ｚ'
		, 'ａ', 'ｂ', 'ｃ', 'ｄ', 'ｅ', 'ｆ', 'ｇ', 'ｈ', 'ｉ', 'ｊ', 'ｋ', 'ｌ', 'ｍ', 'ｎ'
		, 'ｏ', 'ｐ', 'ｑ', 'ｒ', 'ｓ', 'ｔ', 'ｕ', 'ｖ', 'ｗ', 'ｘ', 'ｙ', 'ｚ'
	};
	
	/**
	 * 半角カタカナ変換用の文字列対応表
	 */
	private static final String[] HANKAKU_KATAKANA = {
		" "   , "､" , "｡" , DMY , "." , "･" , ":" , ";" , "?" , "!" , "ﾞ" , "ﾟ" , DMY , "`" , DMY
		, "^" , DMY , "_" , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , "-" , "-" , "-" , "/"
		, "\\", "~" , DMY , "|" , DMY , DMY , "`" , "'" , DMY , DMY , "(" , ")" , DMY , DMY , "[" , "]"
		, "{" , "}" , DMY , DMY , DMY , DMY , "｢" , "｣" , DMY , DMY , DMY , DMY , "+" , "-" , DMY , DMY
		, DMY , "=" , DMY , "<" , ">" , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , "\\"
		, "$" , DMY , DMY , "%" , "#" , "&" , "*" , "@" , DMY , DMY , DMY , DMY , DMY , DMY , DMY
		, DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY
		, DMY , DMY , DMY , DMY , DMY , DMY
		, DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY
		, DMY , DMY , DMY , DMY , DMY
		, DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY
		, DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY , DMY
		, "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9"
		, "ｧ" , "ｱ" , "ｨ" , "ｲ" , "ｩ" , "ｳ" , "ｪ" , "ｴ" , "ｫ" , "ｵ" , "ｶ" , "ｶﾞ", "ｷ" , "ｷﾞ", "ｸ"
		, "ｸﾞ", "ｹ" , "ｹﾞ", "ｺ" , "ｺﾞ", "ｻ" , "ｻﾞ", "ｼ" , "ｼﾞ", "ｽ" , "ｽﾞ", "ｾ" , "ｾﾞ", "ｿ" , "ｿﾞ", "ﾀ" 
		, "ﾀﾞ", "ﾁ" , "ﾁﾞ", "ｯ" , "ﾂ" , "ﾂﾞ", "ﾃ" , "ﾃﾞ", "ﾄ" , "ﾄﾞ", "ﾅ" , "ﾆ" , "ﾇ" , "ﾈ" , "ﾉ" , "ﾊ"
		, "ﾊﾞ", "ﾊﾟ", "ﾋ" , "ﾋﾞ", "ﾋﾟ", "ﾌ" , "ﾌﾞ", "ﾌﾟ", "ﾍ" , "ﾍﾞ", "ﾍﾟ", "ﾎ" , "ﾎﾞ", "ﾎﾟ", "ﾏ" , "ﾐ"
		, "ﾑ" , "ﾒ" , "ﾓ" , "ｬ" , "ﾔ" , "ｭ" , "ﾕ" , "ｮ" , "ﾖ" , "ﾗ" , "ﾘ" , "ﾙ" , "ﾚ" , "ﾛ" , "ﾜ" , "ﾜ"
		, "ｲ" , "ｴ" , "ｦ" , "ﾝ" , "ｳﾞ", "ｶ" , "ｹ"
		, "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N"
		, "O" , "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z"
		, "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , "n"
		, "o" , "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z"
	};
	
	/**
	 * オブジェクトに値が設定されているか判定します。
	 * @param arg0
	 * @return オブジェクトに値が設定されていない場合はtrue
	 */
	public static boolean isNull(Object arg0)
	{
		return JPCCommonUtil.isNull(arg0);
	}
	
	/**
	 * 文字列を「"」で囲みます。
	 * @param arg0 対象文字列
	 * @return "対象文字列"
	 */
	public static String getStringToDblQuote(String arg0)
	{
		return SINGLE_DBLQUOTE + arg0 + SINGLE_DBLQUOTE;
		
	}
	
	/**
	 * 開始位置から終了までの文字列を返す
	 * @param str
	 * @param staIdx
	 * @param endLen
	 * @return String
	 */
	public static String getEmptyOrSubString(String str, int staIdx, int endLen)
	{
		int end = endLen;
		// 引数の文字列が空 または 開始位置より小さい場合、空文字を返却する
		if(isNull(str) || str.length() <= staIdx)
		{
			return "";
		}
		
		// 引数の文字列が終了位置より小さい場合、終了位置を文字サイズに合わせる
		if(str.length() < endLen)
		{
			end = str.length();
		}
		
		return str.substring(staIdx, end);
	}
	
	/**
	 * ゼロ埋め（左）を行う
	 * @param value
	 * @param len
	 * @return String
	 */
	public static String setzero(String value, int len)
	{
		if(value == null)
		{
			return value;
		}
		String tmp = value;
		String zero = "0";
		
		while(tmp.length() < len)
		{
			tmp = zero + tmp;
		}
		
		return tmp;
	}
	

	/**
	 * 電話番号（ハイフン編集済み）を分割する。
	 * @param value
	 * @return String[]
	 */
	public static String[] cutTelNo(String value)
	{
		//電話番号：市外局番、市内局番、加入者番号
		String[] telno = {"", "", ""};
		String tmp = "";
		if(value == null)
		{
			return telno;
		}
		if(value.length() < 12 || value.length() > 13)
		{
			return telno;
		}
		
		telno[0] = value.substring(0, value.indexOf(JTUStrConst.HIHUN));
		tmp = value.substring(value.indexOf(JTUStrConst.HIHUN) + 1, value.length());
		telno[1] = tmp.substring(0, tmp.indexOf(JTUStrConst.HIHUN));
		tmp = tmp.substring(tmp.indexOf(JTUStrConst.HIHUN) + 1, tmp.length());
		telno[2] = tmp;
		
		return telno;
	}
	
	/**
	 * 住所編集パターン01を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return 引数の連結値
	 */
	public static String getPtn01(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm) 
	{
		return JZMAdOutputEdit.getPtn01(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);
	}
	
	/**
	 * 住所編集パターン09を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[10]{都道府県名, 市区郡町村名, 大字通称名, 字丁目名, 
	 * 						街区1(20文字), 街区2(10文字), 街区3(10文字), 肩書1(20文字), 肩書2(10文字), 肩書3(10文字)}
	 */
	public static String[] getPtn09(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm)
	{
		boolean isNullCheck = isNull(bnchigo);
		String bnchigo_dummy = bnchigo;
		if(isNullCheck)
		{
			bnchigo_dummy = DUMMY_BNCHIGO;
		}
		
		String[] rslt = JZMAdOutputEdit.getPtn09(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo_dummy, adrttm, adrrm);
		
		if(isNullCheck)
		{
			rslt[4] = "";
			rslt[5] = "";
			rslt[6] = "";
		}
		
		rslt = nullToBlankForMat(rslt);
		
		return rslt;
	}
	
	/**
	 * 住所編集パターン14を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return 「都道府県名+市区町村名」+"\r\n"+「大字通称名+字丁目名」+「番地号」+"\r\n"+「住所補記・建物名+住所補記・部屋番号」編集した値
	 */
	public static String getPtn14(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm) 
	{
		
		boolean isDummyCheck = isNull(bnchigo);
		String bnchigo_dummy = bnchigo;
		
		if(isDummyCheck)
		{
			bnchigo_dummy = DUMMY_BNCHIGO;
		}

		int bnchigo_len = bnchigo_dummy.length();
		if(isNull(stateNm) && bnchigo_len < BNCHIGO_MIN_LEN)
		{
			for(int i = 0; i < BNCHIGO_MIN_LEN - bnchigo_len; i++)
			{
				bnchigo_dummy = bnchigo_dummy + DUMMY_BNCHIGO;
				isDummyCheck = true;
			}
		}
		
		String rslt = JZMAdOutputEdit.getPtn14(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo_dummy, adrttm, adrrm);

		if(isNull(rslt))
		{
			rslt = "";
		}
		
		if(isDummyCheck)
		{
			rslt = rslt.replaceAll(DUMMY_BNCHIGO, "");
		}
		
		return rslt;
	}
	
	/**
	 * 住所編集パターン15を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[3]{都道府県名+市区町村名,大字通称名+字丁目名+番地号(上20文字),住所補記・建物名+住所補記・部屋番号(上40文字)}
	 */
	public static String[] getPtn15(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm) 
	{
		boolean isDummyCheck = isNull(bnchigo);
		String bnchigo_dummy = bnchigo;
		if(isDummyCheck)
		{
			bnchigo_dummy = DUMMY_BNCHIGO;
		}
		
		int bnchigo_len = bnchigo_dummy.length();
		if(isNull(stateNm) && bnchigo_len < BNCHIGO_MIN_LEN)
		{
			for(int i = 0; i < BNCHIGO_MIN_LEN - bnchigo_len; i++)
			{
				bnchigo_dummy = bnchigo_dummy + DUMMY_BNCHIGO;
				isDummyCheck = true;
			}
		}
		
		String[] rslt = JZMAdOutputEdit.getPtn15(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo_dummy, adrttm, adrrm);
		
		if(isDummyCheck)
		{
			if(!isNull(rslt[0]))
			{
				rslt[0] = rslt[0].replaceAll(DUMMY_BNCHIGO, "");
			}

			if(!isNull(rslt[1]))
			{
				rslt[1] = rslt[1].replaceAll(DUMMY_BNCHIGO, "");
			}
		}
		
		rslt = nullToBlankForMat(rslt);
		
		return rslt;
	}
	
	/**
	 * 住所編集パターン16を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[3]{都道府県名+市区町村名,大字通称名+字丁目名+番地号,住所補記・建物名+住所補記・部屋番号}
	 */
	public static String[] getPtn16(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm) 
	{
		boolean isDummyCheck = isNull(bnchigo);
		String bnchigo_dummy = bnchigo;
		if(isDummyCheck)
		{
			bnchigo_dummy = DUMMY_BNCHIGO;
		}
		
		int bnchigo_len = bnchigo_dummy.length();
		if(isNull(stateNm) && bnchigo_len < BNCHIGO_MIN_LEN)
		{
			for(int i = 0; i < BNCHIGO_MIN_LEN - bnchigo_len; i++)
			{
				bnchigo_dummy = bnchigo_dummy + DUMMY_BNCHIGO;
				isDummyCheck = true;
			}
		}
		
		String[] rslt = JZMAdOutputEdit.getPtn16(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo_dummy, adrttm, adrrm);
		
		if(isDummyCheck)
		{
			if(!isNull(rslt[0]))
			{
				rslt[0] = rslt[0].replaceAll(DUMMY_BNCHIGO, "");
			}

			if(!isNull(rslt[1]))
			{
				rslt[1] = rslt[1].replaceAll(DUMMY_BNCHIGO, "");
			}
		}
		
		rslt = nullToBlankForMat(rslt);
		
		return rslt;
	}
	
	/**
	 * 住所編集パターン17を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[10]{都道府県名,市区郡町村名,大字通称名,字丁目名,番地号(上20文字),"","",住所補記・建物名(上20文字),住所補記・部屋番号(上10文字),""}
	 */
	public static String[] getPtn17(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm) 
	{
		return JZMAdOutputEdit.getPtn17(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);
	}
	
	/**
	 * 住所編集パターン18を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[7]{都道府県名+市区郡町村名+大字通称名+字丁目名,番地号(上15文字),"","",住所補記・建物名,住所補記・部屋番号,""}
	 */
	public static String[] getPtn18(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm) 
	{
		return JZMAdOutputEdit.getPtn18(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);
	}
	
	/**
	 * 住所編集パターン19を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[10]{都道府県名,市区郡町村名,大字通称名,字丁目名,番地号(上15文字),"","",住所補記・建物名,住所補記・部屋番号,""}
	 */
	public static String[] getPtn19(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm) 
	{
		return JZMAdOutputEdit.getPtn19(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);
	}
	
	/**
	 * 住所編集パターン24を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[3]{都道府県名+市区町村名,大字通称名+字丁目名+番地号,住所補記・建物名+住所補記・部屋番号}
	 */
	public static String[] getPtn24(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm) 
	{
		boolean isDummyCheck = isNull(bnchigo);
		String bnchigo_dummy = bnchigo;
		if(isDummyCheck)
		{
			bnchigo_dummy = DUMMY_BNCHIGO;
		}
		
		int bnchigo_len = bnchigo_dummy.length();
		if(isNull(stateNm) && bnchigo_len < BNCHIGO_MIN_LEN)
		{
			for(int i = 0; i < BNCHIGO_MIN_LEN - bnchigo_len; i++)
			{
				bnchigo_dummy = bnchigo_dummy + DUMMY_BNCHIGO;
				isDummyCheck = true;
			}
		}
		
		String[] rslt = JZMAdOutputEdit.getPtn24(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo_dummy, adrttm, adrrm);
		
		if(!isNull(rslt[1]))
		{
			if (rslt[1].length() > 20)
			{
				rslt[1] = rslt[1].substring(0, 20);
			}
		}
		if(!isNull(rslt[2]))
		{
			if (rslt[2].length() > 40)
			{
				rslt[2] = rslt[2].substring(0, 40);
			}
		}
		if(isDummyCheck)
		{
			if(!isNull(rslt[0]))
			{
				rslt[0] = rslt[0].replaceAll(DUMMY_BNCHIGO, "");
			}

			if(!isNull(rslt[1]))
			{
				rslt[1] = rslt[1].replaceAll(DUMMY_BNCHIGO, "");
			}
		}
		
		rslt = nullToBlankForMat(rslt);
		
		return rslt;
	}
	
	/**
	 * NullToBlank（配列用）
	 * 配列の内容を確認して、Nullが存在する場合、Blankに変更する。
	 * @param matrix
	 * @return String[]
	 */
	public static String[] nullToBlankForMat(String[] matrix)
	{
		
		if(matrix == null)
		{
			return matrix;
		}

		String[] rtn_matrix = matrix;
		
		for(int i = 0; i < rtn_matrix.length; i++)
		{
			if(isNull(rtn_matrix[i]))
			{
				rtn_matrix[i] = "";
			}
		}
		return rtn_matrix;
	}

	/**
	 * 全角カタカナ(ドメイン準拠)から半角カタカナへの変換を行います。
	 * <br>
	 * @param arg0 変換する文字列
	 * @return String 変換された文字列
	 */
	public static String convWideToHalfKatakana(String arg0) 
	{
		StringBuffer strBuf = new StringBuffer();

		boolean conFlg = false;
		
		if(isNull(arg0))
		{
			return arg0;
		}
		
		// 文字列を1文字ずつ取り出して半角カナへ変換する
		for(int i = 0; i < arg0.length(); i++) 
		{
			char code = arg0.charAt(i);
			
			for(int j = 0; j < ZENKAKU_KATAKANA.length; j++) 
			{
				if(code == ZENKAKU_KATAKANA[j]) 
				{
					strBuf.append(HANKAKU_KATAKANA[j]);

					conFlg = true;

					break;
				}
			}

			// 半角カナ対応表に一致しない文字列が存在した場合、エラー
			if(!conFlg) 
			{
				throw new IllegalArgumentException(JTUStrConst.HIKISU_FUSEI);
			}

			conFlg = false;
		}

		return strBuf.toString();
	}
	
}
