CharWidthPaddingProcessor.java
package com.github.mygreen.supercsv.cellprocessor.conversion;
import com.github.mygreen.supercsv.util.ArgUtils;
/**
* 文字の幅によって区別してパディングする。
* <p>半角は長さ1、全角は長さ2としてカウントして処理します。</p>
* <p>サロゲートペアは長さ2としてカウントします。</p>
*
* @since 2.1
* @author T.TSUCHIE
*
*/
public class CharWidthPaddingProcessor extends AbstractPaddingOperator {
@Override
public int count(int codePoint) {
if(Character.charCount(codePoint) >= 2) {
// サロゲートペアの文字=全角として2文字としてカウントする。
return 2;
}
final char c = (char)codePoint;
if(c <= '\u007e' // 英数字
|| c == '\u00a5' // \記号
|| c == '\u203e' // ~記号
|| (c >= '\uff61' && c <= '\uff9f') // 半角カナ
) {
return 1;
} else {
return 2;
}
}
@Override
public int count(final String text) {
ArgUtils.notNull(text, "text");
int count=0;
final int length = text.length();
for(int i=0, codePoint=0; i < length; i+=Character.charCount(codePoint)) {
codePoint = text.codePointAt(i);
count += count(codePoint);
}
return count;
}
}