/*
このファイルの中身は、NTT オープンソースライセンス　バージョン 1.0（「本
契約」という）の適用を受けます。
本契約を遵守しない限り、このファイルを使用してはなりません。
本契約のコピーは、次のＵＲＬから入手できます。
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

本契約に基づき頒布されるソフトウェアは、現状のまま、明示又は黙示のあらゆ
る種類の保証なしで、頒布されます。本契約に基づく権利及び制限を律する特定
の文言については、本契約を参照してください。

「オリジナルコード」は、 NTT Cyber Space Laboratories Code です。 
「オリジナルコード」の「初期開発者」は、日本電信電話株式会社です。  
日本電信電話株式会社により創作された部分は、Copyright (C) 2004 
日本電信電話株式会社 です。
全ての権利が留保されます。 
「コントリビュータ」：_____________________________________ 


The contents of this file are subject to the NTT Opensource License
Version 1.0 (the License); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

Software distributed under the License is distributed on an AS IS
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.

The Original Code is NTT Cyber Space Laboratories Code .

The Initial Developer of the Original Code is NIPPON TELEGRAPH AND 
TELEPHONE CORPORATION.
Portions created by the NIPPON TELEGRAPH AND TELEPHONE CORPORATION 
are Copyright (C) 2004 NIPPON TELEGRAPH AND TELEPHONE CORPORATION. 
All Rights Reserved.

Contributor(s) ______________________________________.
*/

//
//	文字列操作クラス
//			変更履歴
//				2004.01.08	新規作成	市川勇次
//
package jp.co.ntt.lms.xmo.util;

import java.util.*;
import java.text.*;

/**
 * XMSⅡでの日付の取り扱いをするユーティリティクラスです。
 * @author Y.Ichikawa
 * @version 0.0.0.1
 */
public class XMOString {

	/**
	 * 渡された文字列の先頭から指定バイト数分の部分文字列を返します
	 * @param String
	 * @param int
	 * @return String
	 */
	public static String substringB( String strValue, int intByte ) {

		String strTemp = "";
		try {
			strTemp = new String( strValue.getBytes(), 0, intByte );
			if( strTemp.length() == 0 ) {
				strTemp = new String( strValue.getBytes(), 0, intByte - 1 );
			}
		}
		catch( StringIndexOutOfBoundsException se ) {
			return strValue;
		}
		return strTemp;
	}

	/**
	 * 文字列中にLF（改行）を見つけたら、
	 * CR(復帰)を直前に付け足します。
	 * @param str 置換前文字列
	 * @return String 置換後文字列
	 */
	public static String escapeLF(String str) {
		StringBuffer sb = new StringBuffer();

		for( int i = 0; i < str.length(); i++ ) {
			// 文字列をcharに分解します。
			char chaTemp = str.charAt(i);
			// LF(0x0A)が見つかったら、直前にLF(0x0D)を挿入します。
			if( chaTemp == 0x0A ) {
				char chaCR = 0x0D;
				sb.append( chaCR );
			}
			sb.append( chaTemp );
		}

		return new String(sb);

	}
	/**
	 * 文字列を指定されたバイト数以下に丸めます。
	 * @param strValue　文字列
	 * @param intBLen バイト数
	 */
	public static String roundB( String strValue, int intBLen ) {
		if( strValue == null || intBLen < 0 ) {
			return null;
		}
		byte[] valueByte = strValue.getBytes();
		while( valueByte.length > intBLen ) {
			strValue = strValue.substring( 0, strValue.length() - 1 );
			valueByte = strValue.getBytes();
		}

		return strValue;
	}

	/**
	 * 重複対応文字列作成メソッド
	 * @param strValue 文字列
	 * @param intNumber 文字列の後ろにつけるナンバー
	 * @param intLen 最大バイト数
	 * @return 文字列の後ろに指定された番号を付与して返します。もし、バイト長より長くなったら、
	 *         nullを返します。
	 */
	public static String makeNoDupliString( String strName, int intNumber, int intLen ) {
		if( strName == null || intNumber < 0 || intLen < 0 ) {
			return null;
		}
		String strNumber = new Integer(intNumber).toString();
		byte[] nameByte = strName.getBytes();
		byte[] numByte = strNumber.getBytes();

		if( numByte.length > intLen ) {
			return null;
		}

		while( nameByte.length + numByte.length > intLen ) {
			strName = strName.substring( 0, strName.length() - 1 );
			nameByte = strName.getBytes();
		}

		return strName + strNumber;
	}


}
