2011年6月17日金曜日

JAVA Log4J 1.2.17 を使ってみた!3

昨日かけなかったLog4jについて、今日も続きの内容を書こう。

環境周りは、昨日までに2回書いてるのでパスします。確認したい方は、
昨日分はこちら
一昨日分はこちら


昨日書けなかった、<layout ~>~</layout>について、
今回使ったLayoutクラスは、org.apache.log4j.PatternLayoutを使用した。
自分でログの出力フォーマットを決めることができるクラスで、
フォーマットについては、<param ~/>で設定する。
nameには、ConversionPatternを設定し、valueにフォーマットを指定する。
今回は、"%d %-5p %c - %-5m [%t] (%F:%L)%n"を設定
%dは、日付を出力
%pは、ログのレベルを出力
%cは、ログを出力したクラスを出力
%mは、メッセージの内容を出力k
%tは、スレッドを出力
&Fは、ログを出力したファイル名を出力
%Lは、ログを出力したファイルの行番号を出力
%nは、改行コードを出力


一昨日のクラスを実行して出力されるログは、下記のようになる。


2011-06-17 21:34:48,436 DEBUG sample.Test - デバッグだよ~ [main] (Test.java:11)
2011-06-17 21:34:48,436 INFO  sample.Test - インフォだよ。 [main] (Test.java:12)
2011-06-17 21:34:48,436 WARN  sample.Test - ワーニング! [main] (Test.java:13)
2011-06-17 21:34:48,436 ERROR sample.Test - エラーッ!! [main] (Test.java:14)
2011-06-17 21:34:48,436 FATAL sample.Test - フェイタルッ!!! [main] (Test.java:15)


2011年6月16日木曜日

JAVA Log4J 1.2.17 を使ってみた!2

昨日の続きで、今日もLog4jについて調べてみた。

今日も昨日と同様の環境だが、念のためのせておこう。
Java 1.6系
log4j log4j-1.2.17.jar

クラスパスにlog4j-1.2.17.jarを指定する。
ダウンロードは、こちら

昨日は、コンソールとファイルに出力されるように設定ファイルを
作成していた。
まずは、何をどうすれば、ファイルに出力されるのか書くことにする。

注目するのは、4行目から9行目の内容
<appender ~>~</appender>
この内容がファイルに出力する内容を設定している。

<appender name="File" class="org.apache.log4j.FileAppender">
nameには、appenderの名前を指定する。
classには、org.apache.log4j.FileAppenderを指定する。
このクラスがファイルに出力するためのクラスとなる。

<param name="File" value="C:/log4j.log" />
paramタグは、appenderに渡すパラメータを指定する。
nameにFileを指定し、vlaueに出力するファイルのパスを指定する。
この内容が出力先のファイル名になる。
ファイルが存在していない場合は、自動で作成する。


それ以外のパラメータは、Append、BufferedIO、BufferSize、
Threshold、ImmediateFlush、Encoding


Appendについては、追記モードを指定する。
指定する値は、boolean(true/false)を設定する。
初期値(指定しない場合)は、falseになっていて追記されない。
毎回ファイルを上書きするので注意が必要。

<param name="Append" value="true" />


BufferedIOについては、バッファリングを指定する。
指定する値は、boolean(true/false)を設定する。
初期値(指定しない場合)は、falseになっていてバッファリングされない。


BufferSizeについては、バッファサイズを指定する。
バッファリングをする場合のバッファサイズになる。


Thresholdについては、appenderごとに出力するログのレベルを指定する。
指定する値は、DEBUG/INFO/WARN/ERROR/FATALを指定できる。


ImmediateFlushについては、バッファの内容を即時出力するかを指定する。
指定する値は、boolean(true/false)を設定する。
初期値(指定しない場合)は、trueになっていてバ即時に出力する。


Encodingについては、出力するファイルの文字コードを指定する。
初期値(指定しない場合)は、OSの文字コードで出力される。


これで、appendarの設定は、完了。
このappendarを使用するかを指定するのが、
<root>~</root>
になる。
appender-refタグで、上記で設定したappendarのnameを指定する。
<appender-ref ref="File" />

ちなみに、<level value="debug" />で、ログの出力レベルを設定できる。


以上で、ファイルに出力する設定が完了。


結構長くなってしまったので、
<layout ~>~</layout>
については、また明日にでも書きます。


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
   <appender name="File" class="org.apache.log4j.FileAppender">
      <param name="File" value="C:/log4j.log" />
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d %-5p %c - %-5m [%t] (%F:%L)%n"/>
      </layout>
   </appender>
   <appender name="Console" class="org.apache.log4j.ConsoleAppender">
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d %-5p %c - %-5m [%t] (%F:%L)%n"/>
      </layout>
   </appender>
   <root>
      <level value="debug" />
      <appender-ref ref="Console" />
      <appender-ref ref="File" />
   </root>
</log4j:configuration>


2011年6月15日水曜日

JAVA Log4J 1.2.17 を使ってみた!

Javaでプログラムを作ってると、System.out.println()とか
System.out.print()を使って、ログのような出力をすることが
結構あると思う。
ちょっとしたツールならいいと思うが、
システムとして作成しているときは、
ちょっとよくないとおもったので、
Log4jを使ってみようと思い、調べてみた。

今回の環境は、
Java 1.6系
log4j log4j-1.2.17.jar

クラスパスにlog4j-1.2.17.jarを指定する。
ダウンロードは、こちら
設定ファイルは、クラスパスの通ったフォルダにlog4j.xmlで作成すると、
指定することなく自動的に読み込んでくれます。

まずは、設定ファイルを作成します。
ファイル名は、log4j.xml
.propertiesで作成することもできるようなので、それはまた後日

xmlの中身の解説も今回は省略します。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
   <appender name="File" class="org.apache.log4j.FileAppender">
      <param name="File" value="C:/log4j.log" />
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d %-5p %c - %-5m [%t] (%F:%L)%n"/>
      </layout>
   </appender>
   <appender name="Console" class="org.apache.log4j.ConsoleAppender">
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d %-5p %c - %-5m [%t] (%F:%L)%n"/>
      </layout>
   </appender>
   <root>
      <level value="debug" />
      <appender-ref ref="Console" />
      <appender-ref ref="File" />
   </root>
</log4j:configuration>


次に、Javaのクラスを作成します。
クラス名は、Test

package sample;

import org.apache.log4j.Logger;

public class Test {

    public static void main(String[] args) {

        Logger logger = Logger.getLogger(Test.class);

        logger.debug("デバッグだよ~");
        logger.info("インフォだよ。");
        logger.warn("ワーニング!");
        logger.error("エラーッ!!");
        logger.fatal("フェイタルッ!!!");
    }
}


試してみてください。


2011年6月14日火曜日

JAVA Stringをチェックするクラス2

先日の文字列をチェックするクラスの第2弾サンプルです。
正規表現の書き方を変更しました。
何が違うか、確認してみてください。
import java.util.regex.Pattern;

public class StringUtil2 {

 /**
  * alphabetがアルファベットの場合に、trueを返す。
  *
  * @param alphabet 文字列
  * @return boolean true : アルファベット / false : アルファベット以外
  */
 public static boolean isAlphabet(String alphabet) {
  try {
   return (Pattern.compile("^[a-zA-Z]*$")).matcher(alphabet).matches();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * characterが英数字の場合に、trueを返す。
  *
  * @param character 文字列
  * @return boolean true : 英数字 / false : 英数字以外
  */
 public static boolean isNumAlphabet(String character) {
  try {
   return (Pattern.compile("^[a-zA-Z0-9]*$")).matcher(character).matches();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * numが数字の場合に、trueを返す。
  *
  * @param num 文字列
  * @return boolean true : 数字 / false : 数字以外
  */
 public static boolean isNum(String num) {
  try {
   return (Pattern.compile("^[0-9]*$")).matcher(num).matches();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * markが半角記号の場合に、trueを返す。
  *
  * @param mark 文字列
  * @return boolean true : 半角記号 / false : 半角記号以外
  */
 public static boolean isMark(String mark) {
  try {
   return (Pattern.compile("^[ -/:-@\\[-\\`\\{-\\~]*$")).matcher(mark).matches();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * characterが半角の場合に、trueを返す。
  *
  * @param character 文字列
  * @return boolean true : 半角 / false : 半角以外
  */
 public static boolean isOneByteChar(String character) {
  try {
   return (Pattern.compile("^[a-zA-Z0-9 -/:-@\\[-\\`\\{-\\~]*$")).matcher(character).matches();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * kanaが半角カナの場合に、trueを返す。
  *
  * @param kana 文字列
  * @return boolean true : 半角カナ / false : 半角カナ以外
  */
 public static boolean isOneByteKana(String kana) {
  try {
   return (Pattern.compile("^[。-゚+]*$")).matcher(kana).matches();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * hiraganaがひらがなの場合に、trueを返す。
  *
  * @param hiragana 文字列
  * @return boolean true : ひらがな / false : ひらがな以外
  */
 public static boolean isHiragana(String hiragana) {
  try {
   return (Pattern.compile("^[ぁ-ゞ]*$")).matcher(hiragana).matches();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * katakanaがカタカナの場合に、trueを返す。
  *
  * @param katakana 文字列
  * @return boolean true : カタカナ文字 / false : カタカナ以外
  */
 public static boolean isKatakana(String katakana) {
  try {
   return (Pattern.compile("^[ァ-ヶ]*$")).matcher(katakana).matches();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * kanjiが漢字の場合に、trueを返す。
  *
  * @param kanji 文字列
  * @return boolean true : 漢字 / false : 漢字以外
  */
 public static boolean isKanji(String kanji) {
  try {
   return (Pattern.compile("^[一-龠]*$")).matcher(kanji).matches();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * zenkakuが全角の場合に、trueを返す。
  *
  * @param kanji 文字列
  * @return boolean true : 全角 / false : 全角以外
  */
 public static boolean isTwoByteChar(String zenkaku) {
  try {
   return (Pattern.compile("^[^ -~。-゚]*$")).matcher(zenkaku).matches();
  } catch (Exception e) {
   return false;
  }
 }
}

2011年6月13日月曜日

JAVA ListやMapや配列をStringへ変換(ログ表示用)

システム作っていると、Debug用のLogにListの内容や、Mapの内容を整形して出力したいときがでてくるんだよね。 そんなときに使えるよ。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class StringUtils {
 @SuppressWarnings("unchecked")
 public static void main(String[] args) {
  List l = new ArrayList();
  for (int i = 0; i < 100; i++) {
   l.add(Integer.toString(i));
  }
  System.out.println(StringUtils.object2String(l, ""));
  System.out.println("----------");
  Map m = new HashMap();
  for (int i = 0; i < 10; i++) {
   Map map = new HashMap();
   for (int j = 0; j < 10; j++) {
    map.put("key" + j, "val" + j);
   }
   l.add(map);
   m.put(i, map);
  }
  System.out.println(StringUtils.object2String(m, ""));
  System.out.println("----------");
  System.out.println(StringUtils.object2String(l, ""));
  System.out.println("----------");
  for (int i = 0; i < 2; i++) {
   List l2 = new ArrayList(l);
   l.add(l2);
  }

  Map map = new HashMap();
  for (int i = 0; i < 10; i++) {
   List l3 = new ArrayList();
   for (int j = 0; j < 10; j++) {
    l3.add(""+ i + "" + j);
   }
   map.put("key" + i, l3);
  }
  l.add(map);
  System.out.println(StringUtils.object2String(l, ""));
  System.out.println("----------");
  l.add(new String[]{"arr1", "arr2", "arr3", "arr4", "arr5", "arr6", "arr7", "arr8", "arr9", "arr0"});
  System.out.println(StringUtils.object2String(l, ""));
 }
 
 
 
 
 public static final String LINE_SEPARATOR = System.getProperty("line.separator");
 public static final String INDENT = "  ";
 public static final String BLANK = " ";
 public static final String COLON = ":";
 public static final String LEFT_CURLY_BRACKET = "{";
 public static final String RIGHT_CURLY_BRACKET = "}";
 public static final String LEFT_SQUARE_BRACKET = "{";
 public static final String RIGHT_SQUARE_BRACKET = "}";
 
 @SuppressWarnings("unchecked")
 public static String object2String(Object obj, String indent) {
  StringBuilder sb = new StringBuilder();
  sb.append(obj.getClass().getCanonicalName());
  sb.append(StringUtils.BLANK);
  sb.append(StringUtils.LEFT_CURLY_BRACKET);
  sb.append(StringUtils.LINE_SEPARATOR);
  if (Iterable.class.isAssignableFrom(obj.getClass())) {
   sb.append(StringUtils.iterator2String((Iterable) obj, indent + StringUtils.INDENT));
  } else if (Map.class.isAssignableFrom(obj.getClass())) {
   sb.append(StringUtils.map2String((Map) obj, indent + StringUtils.INDENT));
  } else if (obj instanceof Object[]) {
   sb.append(StringUtils.array2String((Object[]) obj, indent + StringUtils.INDENT));
  } else {
   sb.append(obj);
  }
  sb.append(indent);
  sb.append(StringUtils.RIGHT_CURLY_BRACKET);
  sb.append(StringUtils.LINE_SEPARATOR);
  return sb.toString();
 }

 @SuppressWarnings("unchecked")
 public static String iterator2String(Iterable it, String indent) {
  StringBuilder sb = new StringBuilder();
  int index = 0;
  for (Object obj : it) {
   sb.append(indent);
   sb.append(StringUtils.LEFT_SQUARE_BRACKET);
   sb.append(StringUtils.BLANK);
   sb.append(index);
   sb.append(StringUtils.BLANK);
   sb.append(StringUtils.RIGHT_SQUARE_BRACKET);
   sb.append(StringUtils.BLANK);
   sb.append(StringUtils.COLON);
   sb.append(StringUtils.BLANK);
   if (Iterable.class.isAssignableFrom(obj.getClass())) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.iterator2String((Iterable) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else if (Map.class.isAssignableFrom(obj.getClass())) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.map2String((Map) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else if (obj instanceof Object[]) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.array2String((Object[]) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else {
    sb.append(obj);
   }
   index++;
   sb.append(StringUtils.LINE_SEPARATOR);
  }
  return sb.toString();
 }

 @SuppressWarnings("unchecked")
 public static String map2String(Map map, String indent) {
  StringBuilder sb = new StringBuilder();
  for (Object obj : map.entrySet()) {
   Entry e = (Entry) obj;
   Object val = e.getValue();
   sb.append(indent);
   sb.append(e.getKey());
   sb.append(StringUtils.BLANK);
   sb.append(StringUtils.COLON);
   sb.append(StringUtils.BLANK);
   if (Iterable.class.isAssignableFrom(val.getClass())) {
    sb.append(val.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.iterator2String((Iterable) val, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else if (Map.class.isAssignableFrom(val.getClass())) {
    sb.append(val.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(map2String((Map) val, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else if (obj instanceof Object[]) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.array2String((Object[]) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else {
    sb.append(val);
   }
   sb.append(StringUtils.LINE_SEPARATOR);
  }
  return sb.toString();
 }
 
 @SuppressWarnings("unchecked")
 public static String array2String(Object[] arr, String indent) {
  StringBuilder sb = new StringBuilder();
  int index = 0;
  for (Object obj : arr) {
   sb.append(indent);
   sb.append(StringUtils.LEFT_SQUARE_BRACKET);
   sb.append(StringUtils.BLANK);
   sb.append(index);
   sb.append(StringUtils.BLANK);
   sb.append(StringUtils.RIGHT_SQUARE_BRACKET);
   sb.append(StringUtils.BLANK);
   sb.append(StringUtils.COLON);
   sb.append(StringUtils.BLANK);
   if (Iterable.class.isAssignableFrom(obj.getClass())) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.iterator2String((Iterable) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else if (Map.class.isAssignableFrom(obj.getClass())) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.map2String((Map) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else if (obj instanceof Object[]) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.array2String((Object[]) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else {
    sb.append(obj);
   }
   index++;
   sb.append(StringUtils.LINE_SEPARATOR);
  }
  return sb.toString();
 }
}

2011年6月12日日曜日

Excel 指定したシートの指定行から最終入力行までクリア

Public Sub clear(sheetName As String, rowNum As Integer)
    Application.ScreenUpdating = False
    ThisWorkbook.Sheets(sheetName).Activate
   
    With ActiveSheet
        If .AutoFilterMode Then
            Selection.End(xlToRight).Select
            HeaderLastCol = Selection.Column
            .Range(.Cells(rowNum, 1), .Cells(rowNum, HeaderLastCol)).Select
            Selection.AutoFilter
        End If
    End With
   
    If ActiveCell.SpecialCells(xlLastCell).Row < rowNum Then
        Exit Sub
    End If
   
    ActiveSheet.Rows("1:" & ActiveCell.SpecialCells(xlLastCell).Row).Delete Shift:=xlUp
    Application.ScreenUpdating = True

End Sub

2011年6月11日土曜日

JAVA Stringをチェックするクラス

文字列をチェックするクラスのサンプルです。
これ以外にも必要なメソッドはたくさんあるけど、まずはこれくらい。
また、これと同じ処理を別の書き方もできるよ。
次回は、別の書き方で作成します。
import java.util.regex.Pattern;

public class StringUtil {
 /**
  * strがnullか""(空文字)の場合に、trueを返す。
  *
  * @param str 入力値
  * @return boolean true : 入力無し / false : 入力有り
  */
 public static boolean isEmpty(String str) {
  if (str == null || "".equals(str)) {
   return true;
  }
  return false;
 }

 /**
  * alphabetがアルファベットの場合に、trueを返す。
  *
  * @param alphabet アルファベットの文字列
  * @return boolean true : アルファベット / false : アルファベット以外
  */
 public static boolean isAlphabet(String alphabet) {
  try {
   return !(Pattern.compile("[^a-zA-Z]")).matcher(alphabet).matches();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * characterが英数字の場合に、trueを返す。
  *
  * @param character 英数字の文字列
  * @return boolean true : 英数字 / false : 英数字以外
  */
 public static boolean isNumAlphabet(String character) {
  try {
   return !(Pattern.compile("[^a-zA-Z0-9]")).matcher(character).matches();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * str1がstr2より大きい場合に、trueを返す。
  *
  * @param str1 英数字の文字列1
  * @param str2 英数字の文字列2
  * @return boolean true : 文字列1が大きい / false : 文字列1が大きくない
  */
 public static boolean charGreaterThan(String str1, String str2) {
  try {
   return str1.compareTo(str2) > 0;
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * str1がstr2より小さい場合に、trueを返す。
  *
  * @param str1 英数字の文字列1
  * @param str2 英数字の文字列2
  * @return boolean true : 文字列1が小さい / false : 文字列1が小さくない
  */
 public static boolean charSmallerThan(String str1, String str2) {
  try {
   return str1.compareTo(str2) < 0;
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * str1がstr2以上の場合に、trueを返す。
  *
  * @param str1 英数字の文字列1
  * @param str2 英数字の文字列2
  * @return boolean true : 文字列1が以上 / false : 文字列1が以上ではない
  */
 public static boolean charGreaterThanEqual(String str1, String str2) {
  try {
   return !StringUtil.charSmallerThan(str1, str2);
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * str1がstr2以下の場合に、trueを返す。
  *
  * @param str1 英数字の文字列1
  * @param str2 英数字の文字列2
  * @return boolean true : 文字列1が以下 / false : 文字列1が以下ではない
  */
 public static boolean charSmallerThanEqual(String str1, String str2) {
  try {
   return !StringUtil.charGreaterThan(str1, str2);
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * zenkakuが全角文字の場合に、trueを返す。
  *
  * @param zenkaku 全角の文字列
  * @return boolean true : 全角 / false : 全角以外
  */
 public static boolean isZenkaku(String zenkaku) {
  try {
   return !(Pattern.compile("[ -~]")).matcher(zenkaku).matches();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * strがstrArrayに存在している場合に、indexを返す。
  *
  * @param str 文字列
  * @return int  0,1,2...n : strArrayに存在する / -1 : strArrayに存在しない
  */
 public static int exist(String str, String[] strArray) {
  int count = 0;
  if (strArray == null) {
   return -1;
  }
  count = strArray.length;
  for (int i = 0; i < count; i++) {
   if (str.startsWith(strArray[i])) {
    return i;
   }
  }
  return -1;
 }
}