package com.github.mygreen.supercsv.cellprocessor.conversion; import org.supercsv.cellprocessor.CellProcessorAdaptor; import org.supercsv.cellprocessor.ift.StringCellProcessor; import org.supercsv.util.CsvContext; /** * 全角を半角に変換するCellProcessor。 * * @since 2.0 * @author T.TSUCHIE * */ public class HalfChar extends CellProcessorAdaptor implements StringCellProcessor { private final CharCategory[] categories; private final JapaneseCharReplacer replacer; public HalfChar(final CharCategory[] categories) { super(); checkPreconditions(categories); this.categories = categories; this.replacer = new JapaneseCharReplacer(categories); } public HalfChar(final CharCategory[] categories, final StringCellProcessor next) { super(next); checkPreconditions(categories); this.categories = categories; this.replacer = new JapaneseCharReplacer(categories); } private static void checkPreconditions(final CharCategory[] categories) { if(categories == null) { throw new NullPointerException("categories should not be null."); } else if(categories.length == 0) { throw new IllegalArgumentException("categories should not be empty."); } } @Override public <T> T execute(final Object value, final CsvContext context) { if(value == null) { return next.execute(value, context); } final String result = replacer.replaceToHalfChar(value.toString()); return next.execute(result, context); } /** * 変換対象の文字の種類を取得します。 * @return コンストラクタで渡した種類です。 */ public CharCategory[] getCategories() { return categories; } }