/*********************************************************************
 *	All Rights reserved, Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JZMAdEditOutput
 *	ソースファイル名：JZMAdEditOutput.java
 *	作成者			：富士通
 *	日付			：2012年02月29日
 *＜機能概要＞
 *	住所出力編集を行います。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v3.00.00	2012/02/29	FJ) 岩元	新規作成
 *	v3.00.00	2012/02/29	FJ) 岩元	【SGY-2012-0000015】新規作成
 *	v3.01.00	2012/06/18	FJ) 早崎	【SGY-2012-0000015】第2弾追加
 *	v3.02.00	2012/10/26	FJ) 岩佐	【IT1-2012-0001492】getPtn22追加
 *	v4.00.00	2012/11/09	FJ) 日野	【ANK-1349-00-00】SBMフェムトセル追加対応
 *	v6.00.00	2013/12/27	FJ) 日野	【ANK-1761-00-00】getPtn24追加対応
 *
 **********************************************************************/

package eo.common.util;

/**
 * 住所出力編集を行います。<p>
 * <br>
 * @author 富士通
 */
public class JZMAdOutputEdit extends JZMCommonUtil
{

	/** 住所1の最大文字数 */
	protected static final int AD1_LEN = 4;

	/** 住所2の最大文字数 */
	protected static final int AD2_LEN = 12;

	/** 住所3の最大文字数 */
	protected static final int AD3_LEN = 18;

	/** 住所4の最大文字数 */
	protected static final int AD4_LEN = 12;

	/** 住所5の最大文字数 */
	protected static final int AD5_LEN = 15;

	/** 住所5寄せの最大値 */
	protected static final int AD5_YOSE_LEN = 61;

	/** 住所6の最大文字数 */
	protected static final int AD6_LEN = 45;

	/** 住所7の最大文字数 */
	protected static final int AD7_LEN = 15;

	/** 改行 */
	private static final String KAIGYO = "\r\n";

	/**
	 * 住所編集パターン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) 
	{
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);

		String ans = adEdit.getAdKami(7);
		return isNull(ans) ? null : ans;
	}

	/**
	 * 住所編集パターン02を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return 各項目の間に全角スペース１文字をいれ連結した値
	 */
	public static String getPtn02(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm) 
	{

		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm, true);

		String ans = adEdit.getAdKamiZenkakuSpace(7);
		return isNull(ans) ? null : ans;
	}

	/**
	 * 住所編集パターン03を返します。
	 * @param bnchigo	番地号	
	 * @param adrttm	住所補記・建物名	
	 * @param adrrm	住所補記・部屋番号	
	 * @param adBnktPst コンテンツ住所分割開始位置	
	 * @return String[3] {住所（都道府県/市区町村）, 住所（上記以外）, 住所（マンション名等）}
	 */
	public static String[] getPtn03(String bnchigo, String adrttm, String adrrm, int adBnktPst)
	{

		JZMAdEdit adEdit = new JZMAdEdit(null, null, null, null, bnchigo, adrttm, adrrm);
		if(isNull(adEdit.getAd5()) && isNull(adEdit.getAd6()) && isNull(adEdit.getAd7()))
		{
			return new String[]{null, null, null};
		}

		String[] ans = bnktStr(trimSpace(bnchigo), adBnktPst);

		if(ans == null)
		{
			return new String[]{null, null, null};
		}

		ans[2] = contAdrEdit(trimSpace(adrttm), trimSpace(adrrm));

		nullToBlankArr(ans);

		return ans;
	}

	/**
	 * 住所編集パターン04を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[3] {住所（都道府県/市区町村）, 住所（上記以外）, 住所（マンション名等）}
	 */
	public static String[] getPtn04(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm)
	{

		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);

		// コンテンツ住所分割位置を取得
		int bnktPst = getContBnktPost(adEdit.getAd1(), adEdit.getAd2(), adEdit.getAd3(), adEdit.getAd4(), adEdit.getAd5());

		String ad = adEdit.getAdKami(5);

		String[] ans = bnktStr(ad, bnktPst);

		if(ans == null)
		{
			return new String[]{null, null, null};
		}

		ans[2] = contAdrEdit(trimSpace(adrttm), trimSpace(adrrm));

		nullToBlankArr(ans);

		return ans;
	}

	/**
	 * 住所編集パターン05を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[3] {住所（都道府県/市区町村）, 住所（上記以外）, 住所（マンション名等）, コンテンツ住所分割位置}
	 */
	public static String[] getPtn05(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm)
	{

		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);

		// コンテンツ住所分割位置を取得
		int bnktPst = getContBnktPost(adEdit.getAd1(), adEdit.getAd2(), adEdit.getAd3(), adEdit.getAd4(), adEdit.getAd5());

		String[] ans = new String[4];
		ans[0] = adEdit.getAdKami(5);
		ans[1] = nullToBlank(adEdit.getAd6());
		ans[2] = nullToBlank(adEdit.getAd7());
		ans[3] = String.valueOf(bnktPst);

		if(isBlankArr(ans, 0, 3))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}

		return ans;
	}

	/**
	 * 住所編集パターン06を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[3] {「都道府県名」, 「市区町村名 + 大字通称名 + 字丁目名 + 番地号」, 「住所補記・建物名 + 住所補記・部屋番号」}
	 */
	public static String[] getPtn06(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm)
	{

		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm, true);

		String[] ans = new String[3];
		ans[0] = adEdit.getAdKami(1);
		ans[1] = adEdit.getAdNaka(2, 5);
		ans[2] = adEdit.getAdShimo(2);

		if(isBlankArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}

		return ans;
	}

	/**
	 * 住所編集パターン07を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[7] {都道府県名, 市区町村名, 大字通称名, 字丁目名, 番地号, 住所補記・建物名, 住所補記・部屋番号}
	 */
	public static String[] getPtn07(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm)
	{

		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm, true);

		String[] ans = new String[7];
		ans[0] = adEdit.getAd1();
		ans[1] = adEdit.getAd2();
		ans[2] = adEdit.getAd3();
		ans[3] = adEdit.getAd4();
		ans[4] = adEdit.getAd5();
		ans[5] = adEdit.getAd6();
		ans[6] = adEdit.getAd7();

		if(isBlankArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}
		return ans;
	}



	/**
	 * 住所編集パターン08を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[3]{住所1, 住所2, 住所3}
	 */
	public static String[] getPtn08(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm)
	{

		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);

		StringBuilder sb = new StringBuilder();
		String kami7 = adEdit.getAdKami(7);
		String[] ans = new String[3];
		if(isNull(kami7))
		{
			// 引数がすべて未入力だった場合、配列のすべての値にnullを設定する。
			setNullArr(ans);
		}
		else
		{
			setStringBuilder(sb, kami7);

			// 住所情報を20文字ずつ出力配列に設定。
			int length = 20;
			ans[0] = getStringBuilderKamiMoji(sb, length);
			ans[1] = getStringBuilderKamiMoji(sb, length);
			ans[2] = getStringBuilderKamiMoji(sb, length);

		}
		return ans;
	}

	/**
	 * 住所編集パターン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)
	{

		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm, true);

		// 返却用配列
		String[] ans = new String[10];
		ans[0] = adEdit.getAd1();
		ans[1] = adEdit.getAd2();
		ans[2] = adEdit.getAd3();
		ans[3] = adEdit.getAd4();

		boolean isNullArr = isNullArr(ans);

		StringBuilder sb = new StringBuilder();

		// 住所関連情報街区の上20文字、上10文字、上10文字を出力配列の4, 5, 6番目に設定。
		ans[4] = getStringBuilderKamiMoji(setStringBuilder(sb, adEdit.getAd5()), 20);
		ans[5] = getStringBuilderKamiMoji(sb, 10);
		ans[6] = getStringBuilderKamiMoji(sb, 10);
		sb.delete(0, sb.length());

		// 住所補記・建物名、住所補記・部屋番号の上20文字、上10文字、上10文字を出力配列の7, 8, 9番目に設定。
		setStringBuilder(sb, adEdit.getAdShimo(2));
		ans[7] = getStringBuilderKamiMoji(sb, 20);
		ans[8] = getStringBuilderKamiMoji(sb, 10);
		ans[9] = getStringBuilderKamiMoji(sb, 10);

		// 配列の0〜3番目の値がnullまたはブランクの場合で、4〜9番目の値がブランクの場合、nullに置換する。
		if(isNullArr)
		{
			ans[4] = blankToNull(ans[4]);
			ans[5] = blankToNull(ans[5]);
			ans[6] = blankToNull(ans[6]);
			ans[7] = blankToNull(ans[7]);
			ans[8] = blankToNull(ans[8]);
			ans[9] = blankToNull(ans[9]);
		}

		// 配列のすべての値がnullまたはブランクの場合は処理エラーとしてすべての引数にnullを設定する。
		if(isNullArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}

		return ans;
	}


	/**
	 * 住所編集パターン10を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[5]{府県・市区町村, 字, 丁目・番地等, 建物名, 部屋番号}
	 */
	public static String[] getPtn10(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm)
	{

		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm, true);

		String[] ans = new String[5];
		ans[0] = adEdit.getAdKami(2);
		ans[1] = adEdit.getAdNaka(3, 3);
		ans[2] = adEdit.getAdNaka(4, 5);
		ans[3] = adEdit.getAdNaka(6, 6);
		ans[4] = adEdit.getAdShimo(1);

		// 配列のすべての値がnullまたはブランクの場合は処理エラーとしてすべての引数にnullを設定する。
		if(isNullArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}
		return ans;
	}


	/**
	 * 住所編集パターン11を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param adrttm 住所補記・建物名
	 * @return String[3]{住所１（都道府県名＋市区町村名）, 住所2（住所補記・建物名）, 住所3（ブランク） }
	 */
	public static String[] getPtn11(String stateNm, String cityNm, String adrttm)
	{

		// トリム処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, null, null, null, adrttm, null);

		String[] ans = new String[]{adEdit.getAdKami(2), adEdit.getAd6(), null};

		// 配列のすべての値がnullまたはブランクの場合は処理エラーとしてすべての引数にnullを設定する。
		if(isNullArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}

		return ans;
	}


	/**
	 * 住所編集パターン12を返します。
	 * @param bnchigo 番地号
	 * @return String[3]{「番地号」を15文字ずつ3分割して出力}
	 */
	public static String[] getPtn12(String bnchigo)
	{

		String[] ans = new String[3];

		JZMAdEdit adEdit = new JZMAdEdit(null, null, null, null, bnchigo, null, null);
		if(isNull(adEdit.getAd5()))
		{
			return ans;
		}

		// 番地号を15文字ずつ出力配列に設定。
		StringBuilder sb = new StringBuilder();
		setStringBuilder(sb, trimSpace(bnchigo));
		ans[0] = getStringBuilderKamiMoji(sb, 15);
		ans[1] = getStringBuilderKamiMoji(sb, 15);
		ans[2] = getStringBuilderKamiMoji(sb, 15);

		// 配列のすべての値がnullまたはブランクの場合は処理エラーとしてすべての引数にnullを設定する。
		if(isNullArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}
		return ans;
	}



	/**
	 * 住所編集パターン13を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[3]{30文字, 30文字, 75文字}
	 */
	public static String[] getPtn13(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm)
	{

		// 返却値の最大値
		final int ad1len = 30;
		final int ad2len = 30;
		final int ad3len = 75;
		String inAdrttm = trimSpace(adrttm);
		String inAdrrm  = trimSpace(adrrm);

		// 住所補記・建物名が未入力で、住所補記部屋番号が入力ありの場合、全角ハイフンを設定する。
		if(isNull(inAdrttm))
		{
			if(!isNull(inAdrrm))
			{
				inAdrttm = ZENKAKU_HAIHUN;
			}
		}

		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, inAdrttm, inAdrrm);


		// 住所の下３（番地号、住所補記・建物名、住所補記・部屋番号）を連結する。
		StringBuilder sb = new StringBuilder();
		setStringBuilder(sb, adEdit.getAdShimo(3));

		// 返却値
		String[] ans = new String[3];

		// 住所の上２（都道府県名、市区町村名）が未入力の場合、出力配列の1番目に住所下３から上30文字を設定する。
		if(adEdit.getAdKami(2) == null || adEdit.getAdKami(2).length() == 0)
		{
			ans[0] = getStringBuilderKamiMoji(sb, ad1len);
		}
		else
		{
			// 入力がある場合は、上２の連結値を設定。
			ans[0] = adEdit.getAdKami(2);
		}

		// 住所下３の文字数が75以上の場合
		if(sb.length() > ad3len)
		{

			// 出力配列の3番目に住所下３の下75文字を設定する。
			ans[2] = getStringBuilderShimoMoji(sb, ad3len);

			// (住所中２ + 住所下３の文字数‐75文字) > 30以上の場合
			if(adEdit.getAdNaka(3, 4).length() + sb.length() > ad2len)
			{

				// 出力配列の1番目に 出力配列の1番目＋住所下３ の上30文字を設定する。
				ans[0] = getStringBuilderKamiMoji(sb.insert(0, adEdit.getAdNaka(3, 4)).insert(0, ans[0]), ad1len);
			}

			// 出力配列2番目に残った文字を設定する。
			ans[1] = sb.toString();
		}
		else
		{

			// 出力配列の2番目に中２（大字通称名、字丁目名）を設定する。
			ans[1] = adEdit.getAdNaka(3, 4);
			ans[2] = sb.toString();
		}

		// 配列のすべての値がnullまたはブランクの場合は処理エラーとしてすべての引数にnullを設定する。
		if(isNullArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}


		return ans;
	}

	/**
	 * 住所編集パターン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) 
	{

		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm, true);

		StringBuilder sb = new StringBuilder();

		// 改行
		String kaigyo = KAIGYO;

		// 返却値
		String ans = null;

		if(!isNull(adEdit.getAdKami(2)))
		{
			setStringBuilder(sb, adEdit.getAdKami(2));
			ans = sb.toString();

			if(!isNull(adEdit.getAdNaka(3, 5)))
			{
				setStringBuilder(sb, kaigyo);
				setStringBuilder(sb, adEdit.getAdNaka(3, 5));
				ans = sb.toString();	

				if(!isNull(adEdit.getAdShimo(2)))
				{
					setStringBuilder(sb, kaigyo);
					setStringBuilder(sb, adEdit.getAdShimo(2));
					ans = sb.toString();
				}
			}
		}

		return isNull(ans) ? null : ans;
	}

	/**
	 * 住所編集パターン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) 
	{

		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm, true);

		StringBuilder sb = new StringBuilder();

		// 返却値
		String[] ans = new String[3];

		ans[0] = adEdit.getAdKami(2);

		setStringBuilder(sb, adEdit.getAdNaka(3, 5));
		ans[1] = getStringBuilderKamiMoji(sb , 20);

		sb.delete(0, sb.length());
		setStringBuilder(sb, adEdit.getAdShimo(2));
		ans[2] = getStringBuilderKamiMoji(sb , 40);

		if(isBlankArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}

		return ans;
	}

	/**
	 * 住所編集パターン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) 
	{
		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm, true);

		// 返却値
		String[] ans = new String[3];

		ans[0] = adEdit.getAdKami(2);
		ans[1] = adEdit.getAdNaka(3, 5);
		ans[2] = adEdit.getAdShimo(2);

		if(isBlankArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}

		return ans;
	}

	/**
	 * 住所編集パターン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) 
	{
		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);

		StringBuilder sb = new StringBuilder();

		// 返却値
		String[] ans = new String[10];

		ans[0] = adEdit.getAd1();

		ans[1] = adEdit.getAd2();

		ans[2] = adEdit.getAd3();

		ans[3] = adEdit.getAd4();

		setStringBuilder(sb, adEdit.getAd5());
		ans[4] = getStringBuilderKamiMoji(sb , 20);

		ans[5] = BLANK;

		ans[6] = BLANK;

		sb.delete(0, sb.length());
		setStringBuilder(sb, adEdit.getAd6());
		ans[7] = getStringBuilderKamiMoji(sb , 20);

		sb.delete(0, sb.length());
		setStringBuilder(sb, adEdit.getAd7());
		ans[8] = getStringBuilderKamiMoji(sb , 10);

		ans[9] = BLANK;

		if(isBlankArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}
		return ans;
	}

	/**
	 * 住所編集パターン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) 
	{

		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);

		StringBuilder sb = new StringBuilder();

		// 返却値
		String[] ans = new String[7];

		ans[0] = adEdit.getAdKami(4);

		setStringBuilder(sb, adEdit.getAd5());
		ans[1] = getStringBuilderKamiMoji(sb , 15);

		ans[2] = BLANK;

		ans[3] = BLANK;

		ans[4] = adEdit.getAd6();

		ans[5] = adEdit.getAd7();

		ans[6] = BLANK;

		if(isBlankArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}

		return ans;
	}

	/**
	 * 住所編集パターン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) 
	{

		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);

		StringBuilder sb = new StringBuilder();

		// 返却値
		String[] ans = new String[10];

		ans[0] = adEdit.getAd1();

		ans[1] = adEdit.getAd2();

		ans[2] = adEdit.getAd3();

		ans[3] = adEdit.getAd4();

		setStringBuilder(sb, adEdit.getAd5());
		ans[4] = getStringBuilderKamiMoji(sb , 15);

		ans[5] = BLANK;

		ans[6] = BLANK;

		ans[7] = adEdit.getAd6();

		ans[8] = adEdit.getAd7();

		ans[9] = BLANK;

		if(isBlankArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}

		return ans;
	}

	/**
	 * 住所編集パターン20を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[3]{都道府県名+市区町村名+大字通称名+字丁目名,番地号(上41文字),住所補記・建物名+住所補記・部屋番号}
	 */
	public static String[] getPtn20(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm) 
	{

		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);

		StringBuilder sb = new StringBuilder();

		// 返却値
		String[] ans = new String[3];

		ans[0] = adEdit.getAdKami(4);

		setStringBuilder(sb, adEdit.getAd5());
		ans[1] = getStringBuilderKamiMoji(sb , 41);

		ans[2] =  adEdit.getAdShimo(2);

		if(isBlankArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}

		return ans;
	}

	/**
	 * 住所編集パターン21を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[5]
	 */
	public static String[] getPtn21(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm) 
	{

		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);

		StringBuilder sb = new StringBuilder();

		// 返却値
		String[] ans = new String[5];

		// 「住所補記・建物名」文字列長
		int len6 = 0;

		// 「住所補記・部屋番号」文字列長
		int len7 = 0;


		//「都道府県名+市区町村名+大字通称名 ≦ 27」の場合
		if(adEdit.getAdKami(3).length() <= 27)
		{
			//「建物名+部屋番号 ≦ 27」
			if(adEdit.getAdShimo(2).length() <= 27)
			{
				ans[0] = adEdit.getAdKami(3);
				ans[1] = adEdit.getAdNaka(4, 5);
				ans[2] = adEdit.getAdShimo(2);

			}
			else
			{
				//「建物名+部屋番号 > 27」

				if(!isNull(adEdit.getAd6()))
				{
					len6 = adEdit.getAd6().length();
				}

				//「建物名 ≦ 27」
				if(len6 <= 27)
				{
					ans[0] = adEdit.getAdKami(3);
					ans[1] = adEdit.getAdNaka(4, 5);
					ans[2] = adEdit.getAd6();
					ans[3] = adEdit.getAd7();
				}
				//「建物名 > 27」
				else
				{
					setStringBuilder(sb, adEdit.getAd6());

					if(!isNull(adEdit.getAd7()))
					{
						len7 = adEdit.getAd7().length();
					}

					//「建物名(28〜45文字目)+部屋番号 ≦ 27」
					if(len6 - 27 + len7 <= 27)
					{
						ans[0] = adEdit.getAdKami(3);
						ans[1] = adEdit.getAdNaka(4, 5);
						ans[2] = getStringBuilderKamiMoji(sb , 27);
						ans[3] = getStringBuilderKamiMoji(sb , 27) + adEdit.getAd7();
					}
					//「建物名(28〜45文字目)+部屋番号 > 27」
					else
					{
						ans[0] = adEdit.getAdKami(3);
						ans[1] = adEdit.getAdNaka(4, 5);
						ans[2] = getStringBuilderKamiMoji(sb , 27);
						ans[3] = getStringBuilderKamiMoji(sb , 27);
						ans[4] = adEdit.getAd7();
					}
				}
			}
		}
		//「都道府県名+市区町村名+大字通称名 > 27の場合
		else
		{
			//「大字通称名+字丁目名+番地号 ≦ 27」
			if(adEdit.getAdNaka(3, 5).length() <= 27)
			{
				//「建物名+部屋番号 ≦ 27」
				if(adEdit.getAdShimo(2).length() <= 27)
				{
					ans[0] = adEdit.getAdKami(2);
					ans[1] = adEdit.getAdNaka(3, 5);
					ans[2] = adEdit.getAdShimo(2);
				}
				//「建物名+部屋番号 > 27」
				else
				{
					if(!isNull(adEdit.getAd6()))
					{
						len6 = adEdit.getAd6().length();
					}

					//「建物名 ≦ 27」
					if(len6 <= 27)
					{
						ans[0] = adEdit.getAdKami(2);
						ans[1] = adEdit.getAdNaka(3, 5);
						ans[2] = adEdit.getAd6();
						ans[3] = adEdit.getAd7();
					}
					//「建物名 > 27」
					else
					{
						setStringBuilder(sb, adEdit.getAd6());

						if(!isNull(adEdit.getAd7()))
						{
							len7 = adEdit.getAd7().length();
						}

						//「建物名(28〜45文字目)+部屋番号 ≦ 27」
						if(len6 - 27 + len7 <= 27)
						{
							ans[0] = adEdit.getAdKami(2);
							ans[1] = adEdit.getAdNaka(3, 5);
							ans[2] = getStringBuilderKamiMoji(sb , 27);
							ans[3] = getStringBuilderKamiMoji(sb , 27) + adEdit.getAd7();
						}
						//「建物名(28〜45文字目)+部屋番号 > 27」
						else
						{
							ans[0] = adEdit.getAdKami(2);
							ans[1] = adEdit.getAdNaka(3, 5);
							ans[2] = getStringBuilderKamiMoji(sb , 27);
							ans[3] = getStringBuilderKamiMoji(sb , 27);
							ans[4] = adEdit.getAd7();
						}

					}
				}
			}
			//「大字通称名+字丁目名+番地号 > 27」
			else
			{
				//「大字通称名+字丁目名 ≦ 27」
				if(adEdit.getAdNaka(3, 4).length() <= 27)
				{
					//「部屋名+部屋番号 ≦ 27」
					if(adEdit.getAdShimo(2).length() <= 27)
					{
						ans[0] = adEdit.getAdKami(2);
						ans[1] = adEdit.getAdNaka(3, 4);
						ans[2] = adEdit.getAd5();
						ans[3] = adEdit.getAdShimo(2);
					}
					//「部屋名+部屋番号 > 27」
					else
					{
						if(!isNull(adEdit.getAd6()))
						{
							len6 = adEdit.getAd6().length();
						}

						//「建物名 ≦ 27」
						if(len6 <= 27)
						{
							ans[0] = adEdit.getAdKami(2);
							ans[1] = adEdit.getAdNaka(3, 4);
							ans[2] = adEdit.getAd5();
							ans[3] = adEdit.getAd6();
							ans[4] = adEdit.getAd7();
						}
						//「建物名 > 27」
						else
						{
							if(!isNull(adEdit.getAd7()))
							{
								len7 = adEdit.getAd7().length();
							}

							//「建物名(28〜45文字目)+部屋番号 ≦ 27」
							if(len6 - 27 + len7 <= 27)
							{
								setStringBuilder(sb, adEdit.getAd6());

								ans[0] = adEdit.getAdKami(2);
								ans[1] = adEdit.getAdNaka(3, 4);
								ans[2] = adEdit.getAd5();
								ans[3] = getStringBuilderKamiMoji(sb , 27);
								ans[4] = getStringBuilderKamiMoji(sb , 27) + adEdit.getAd7();
							}
							//「建物名(28〜45文字目)+部屋番号 > 27」
							else
							{
								for(int i = 0; i < adEdit.getAdAll().length; i++)
								{
									setStringBuilder(sb, adEdit.getAdAll()[i]);
								}
								ans[0] = getStringBuilderKamiMoji(sb , 27);
								ans[1] = getStringBuilderKamiMoji(sb , 27);
								ans[2] = getStringBuilderKamiMoji(sb , 27);
								ans[3] = getStringBuilderKamiMoji(sb , 27);
								ans[4] = getStringBuilderKamiMoji(sb , 27);
							}

						}

					}
				}
				//「大字通称名+字丁目名 > 27」
				else
				{
					//「部屋名+部屋番号 ≦ 27」
					if(adEdit.getAdShimo(2).length() <= 27)
					{
						ans[0] = adEdit.getAdKami(2);
						ans[1] = adEdit.getAd3();
						ans[2] = adEdit.getAdNaka(4, 5);
						ans[3] = adEdit.getAdShimo(2);

					}
					//「部屋名+部屋番号 > 27」	
					else
					{
						if(!isNull(adEdit.getAd6()))
						{
							len6 = adEdit.getAd6().length();
						}

						//「建物名 ≦ 27」
						if(len6 <= 27)
						{
							ans[0] = adEdit.getAdKami(2);
							ans[1] = adEdit.getAd3();
							ans[2] = adEdit.getAdNaka(4, 5);
							ans[3] = adEdit.getAd6();
							ans[4] = adEdit.getAd7();
						}
						//「建物名 > 27」
						else
						{
							if(!isNull(adEdit.getAd7()))
							{
								len7 = adEdit.getAd7().length();
							}

							//「建物名(28〜45文字目)+部屋番号 ≦ 27」
							if(len6 - 27 + len7 <= 27)
							{
								setStringBuilder(sb, adEdit.getAd6());

								ans[0] = adEdit.getAdKami(2);
								ans[1] = adEdit.getAd3();
								ans[2] = adEdit.getAdNaka(4, 5);
								ans[3] = getStringBuilderKamiMoji(sb , 27);
								ans[4] = getStringBuilderKamiMoji(sb , 27) + adEdit.getAd7();

							}
							//「建物名(28〜45文字目)+部屋番号 > 27」
							else
							{
								for(int i = 0; i < adEdit.getAdAll().length; i++)
								{
									setStringBuilder(sb, adEdit.getAdAll()[i]);
								}

								ans[0] = getStringBuilderKamiMoji(sb , 27);
								ans[1] = getStringBuilderKamiMoji(sb , 27);
								ans[2] = getStringBuilderKamiMoji(sb , 27);
								ans[3] = getStringBuilderKamiMoji(sb , 27);
								ans[4] = getStringBuilderKamiMoji(sb , 27);
							}
						}
					}
				}

			}
		}

		if(isBlankArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}

		return ans;
	}

	/**
	 * 住所編集パターン22を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return String[5]{府県・市区町村, 字, 丁目・番地等, 建物名, 部屋番号}
	 */
	public static String[] getPtn22(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm)
	{

		// 各住所項目を共通領域に格納
		JZMAdEdit adEdit = null;
		
		// 番地号がnullの場合は番地号寄せ分割処理を実施しない
		if (null == bnchigo || bnchigo.equals(BLANK))
		{
			adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);
		}
		else
		{
			adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm, true);
		}
		
		// 出力内容の設定
		String[] ans = new String[5];
		ans[0] = adEdit.getAdKami(2);
		ans[1] = adEdit.getAdNaka(3, 3);
		ans[2] = adEdit.getAdNaka(4, 5);
		ans[3] = adEdit.getAdNaka(6, 6);
		ans[4] = adEdit.getAdShimo(1);

		// 配列のすべての値がnullまたはブランクの場合は処理エラーとしてすべての引数にnullを設定する。
		if(isNullArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}
		return ans;
	}

	/**
	 * 住所編集パターン23を返します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return 引数の連結値
	 */
	public static String getPtn23(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm)
	{
		
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);
		
		StringBuilder sb = new StringBuilder();
		
		setStringBuilder(sb, adEdit.getAdKami(7));
		
		// 各住所項目の総文字数
		int inAdLen = sb.length();
		
		String ans = BLANK;
		
		// 106文字以上の場合、返却値が105文字になるように「住所補記・建物名」から文字を削除する。
		if(inAdLen < 106)
		{
			ans = sb.toString();
		}
		else
		{
			ans = adEdit.getAdKami(6).substring(0, adEdit.getAdKami(6).length() - (inAdLen - 105)) + adEdit.getAdShimo(1);
		}
		
		return isNull(ans) ? null : ans;
	}
	
	/**
	 * 住所編集パターン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) 
	{
		// 番地号寄せ分割編集処理
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm, true);

		// 返却値
		String[] ans = new String[3];

		ans[0] = adEdit.getAdKami(3);
		ans[1] = adEdit.getAdNaka(4, 5);
		ans[2] = adEdit.getAdShimo(2);

		if(isBlankArr(ans))
		{
			setNullArr(ans);
		}
		else
		{
			nullToBlankArr(ans);
		}

		return ans;
	}
	
	/**
	 * 対象文字列を指定位置で2つに分割します。
	 * @param tag 対象文字列
	 * @param bnktPst 分割位置
	 * @return 分割した文字列の配列
	 */
	private static String[] bnktStr(String tag, int bnktPst)
	{
		if(isNull(tag))
		{
			return null;
		}
		if(tag.length() < bnktPst)
		{
			return new String[]{tag, BLANK, null};
		}	
		return new String[]{ tag.substring(0, bnktPst - 1), tag.substring(bnktPst - 1), null};
	}

	/**
	 * コンテンツ住所分割編集処理 住所補記の処理を行います。
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return 住所（マンション名等）
	 */
	private static String contAdrEdit(String adrttm, String adrrm)

	{
		if(isNull(adrttm) && isNull(adrrm))
		{
			return BLANK;
		}
		String tmpAdrttm = nullToBlank(adrttm);
		String tmpAdrrm = nullToBlank(adrrm);
		StringBuilder ans = new StringBuilder();
		ans.append(tmpAdrttm).append(tmpAdrrm);
		if(ans.length() <= 44)
		{
			if(!isNull(adrttm) && !isNull(adrrm))
			{
				ans.insert(tmpAdrttm.length(), ZENKAKU_SPACE);
			}
		}
		else
		{
			ans.delete(45, ans.length());
		}
		return ans.toString();
	}



	/**
	 * コンテンツ住所分割位置を取得します。
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @return コンテンツ住所分割位置
	 */
	private static int getContBnktPost(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo) 
	{
		JZMAdEdit adEdit = new JZMAdEdit(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, null, null);

		if(adEdit.getAdNaka(3, 5).length() <= 45)
		{
			return adEdit.getAdKami(2).length() + 1;
		}
		else
		{
			return adEdit.getAdKami(5).length() + 1 - 45;
		}
	}


	/**
	 * StringBuilderから指定の文字数を取得し、取得分の文字をStringBuilderから削除します。
	 * @param sb StringBuilder
	 * @param length 文字数
	 * @return 取得文字列
	 */
	private static String getStringBuilderKamiMoji(StringBuilder sb, int length)
	{
		int maxLength = getStringBuilderBnktMaxLength(sb, length);
		String ans = sb.substring(0, maxLength);
		sb.delete(0, maxLength);
		return ans;
	}



	/**
	 * StringBuilderから指定の文字数を下から取得し、取得分の文字をStringBuilderから削除します。
	 * @param sb StringBuilder
	 * @param length 文字数
	 * @return 取得文字列
	 */
	private static String getStringBuilderShimoMoji(StringBuilder sb, int length)
	{
		int maxLength = getStringBuilderBnktMaxLength(sb, length);
		String ans = sb.substring(sb.length() - maxLength, sb.length());
		sb.delete(sb.length() - maxLength, sb.length());
		return ans;
	}

	/**
	 * StringBuilderから取得可能な最大の文字数を取得します。
	 * @param sb StringBuilder
	 * @param length 文字数
	 * @return 分割可能最大文字数
	 */
	private static int getStringBuilderBnktMaxLength(StringBuilder sb, int length)
	{
		int maxLength = 0;
		if(sb.length() < length)
		{
			maxLength = sb.length();
		}
		else
		{
			maxLength = length;
		}
		return maxLength;
	}

	/**
	 * ブランクの場合nullに置き換える。
	 * @param arg0 対象文字列
	 * @return 置換結果
	 */
	private static String blankToNull(String arg0)
	{
		return BLANK.equals(arg0) ? null : arg0;
	}

	/**
	 * 配列がブランクのみで構成されているかを判定します。
	 * @param arr 配列
	 * @return 判定結果
	 */
	private static boolean isBlankArr(String[] arr)
	{

		return isBlankArr(arr, 0, arr.length);
	}

	/**
	 * 配列がブランクのみで構成されているかを判定します。
	 * @param arr 配列
	 * @param startIndex 判定開始位置
	 * @param lastIndex 判定終了位置
	 * @return 判定結果
	 */
	private static boolean isBlankArr(String[] arr, int startIndex, int lastIndex)
	{
		for(int i = startIndex; i < lastIndex; i++)
		{
			if(!isNull(arr[i]))
			{
				return false;
			}
		}
		return true;
	}


	/**
	 * 配列がnullのみで構成されているかを判定します。
	 * @param arr 配列
	 * @return 判定結果
	 */
	private static boolean isNullArr(String[] arr)
	{

		return isNullArr(arr, 0, arr.length);
	}

	/**
	 * 配列がnullのみで構成されているかを判定します。
	 * @param arr 配列
	 * @param startIndex 判定開始位置
	 * @param lastIndex 判定終了位置
	 * @return 判定結果
	 */
	private static boolean isNullArr(String[] arr, int startIndex, int lastIndex)
	{
		for(int i = startIndex; i < lastIndex; i++)
		{
			if(!isNull(arr[i]))
			{
				return false;
			}
		}
		return true;
	}

	/**
	 * 配列のすべての要素にnullを設定します。
	 * @param arr 配列
	 */
	private static void setNullArr(String[] arr)
	{
		for(int i = 0; i < arr.length; i++)
		{
			arr[i] = null;
		}
	}

	/**
	 * 配列の要素にnullが含まれる場合、ブランクを設定します。
	 * @param arr 配列
	 */
	private static void nullToBlankArr(String[] arr)
	{
		for(int i = 0; i < arr.length; i++)
		{
			if(isNull(arr[i]))
			{
				arr[i] = BLANK;
			}
		}
	}

	/**
	 * StringBuilderにappendします。<BR />
	 * 追加する値がnullの場合はブランクを追加します。
	 * @param sb StringBuilder
	 * @param arg0 追加する値
	 * @return StringBuilder
	 */
	private static StringBuilder setStringBuilder(StringBuilder sb, String arg0)
	{
		return sb.append(nullToBlank(arg0));
	}
}
