/*
 * 作成日: 2005/07/25
 *
 * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
package jp.ryumago.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author Administrator
 *
 * TODO この生成された型コメントのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
public class KinsokuCheck {

	public static void main(String[] args) {
		//行頭禁則文字をチェックし発見した場合前行の後ろに移動させる。
		String testMoji = "テスト文字列を、\n修正いたします\n。（多分\n）（ｂｙ龍の孫）あいうえお。う\nぇｗ";

		//修正前の状態をコンソールに表示
		System.out.println("※※※修正前※※※\n" + testMoji + "\n※※※※※※※※※\n");
		
		//禁則文字のパターンをセット
		String[] pattern = { "）", "。", "、", "っ", "ぁ", "ぃ", "ぅ", "ぇ", "ぉ", "ゃ",
				"ゅ", "ょ", "，", "ゎ", "」", "』" };

		//禁則チェック及び修正を行うメソッドから結果を取得
		String kekka = mojiShuusei(testMoji, pattern);
		
		//修正結果を表示
		System.out.println("※※※修正後※※※\n" + kekka + "\n※※※※※※※※※\n");
	}

	/**
	 * 
	 * @param moji チェック・修正対象の文字列（String）
	 * @param patterns 禁則文字列のパターン（String[]）
	 * @return 修正済み文字列（String）
	 */
	private static String mojiShuusei(String moji,String[] patterns){
		//返却値
		String retStr = "";

		//行頭禁則チェック
		String pattern = stringArrayToString(patterns);
		Pattern p = Pattern.compile("^[" + pattern + "]");

		//改行にて文字列分割
		String[] arrayMoji = moji.split("\n");
		
		String workString = "";

		//Matcherを宣言
		Matcher m;
		for( int i = 0; i < arrayMoji.length; i++ ){
			if ( arrayMoji[i].length() > 0 ){
				//２行目以降なら処理を行う
				if ( i > 0 ){

					m = p.matcher(arrayMoji[i]);
					if ( m.find() ){
						//前の行に移す
						workString += arrayMoji[i - 1] + m.group()+"\n";
					
						//現在行のを消す
						arrayMoji[i] = m.replaceFirst("");

					}else{
						workString += arrayMoji[i-1] +"\n";
					}
				}else{
					workString ="";
				}
			}

			if ( i == arrayMoji.length -1 ){
				retStr = workString + arrayMoji[i];
			}

		}
		return retStr;
	}

	/**
	 * 文字配列の値を文字列に変換し、返却します。
	 * @param patterns（String[]）
	 * @return 返却文字列（String）
	 */
	private static String stringArrayToString(String[] patterns){
		String pattern = "";
		if ( patterns != null && patterns.length > 0 ){
			for( int i = 0; i < patterns.length ; i++ ){
				if ( patterns[i].length() > 0 ){
					pattern += patterns[i];
				}
			}
		}
		return pattern;
	}
}
