Utils.java
package com.github.mygreen.cellformatter.lang;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* ライブラリのユーティリティクラス。
* @author T.TSUCHIE
*
*/
public class Utils {
/**
* 値がnullまたは空文字か判定する。
* @param str
* @return true: 引数がnullまたは空文字。
*/
public static boolean isEmpty(final String str) {
if(str == null || str.isEmpty()) {
return true;
}
return false;
}
/**
* 値がnullかつ空文字でないか判定する。
* @param str
* @return true: 引数がnullかつ空文字でない場合
*/
public static boolean isNotEmpty(final String str) {
return !isEmpty(str);
}
/**
* 辞書の逆順で並び替える
* @param array 並び替える配列
* @return
* @throws IllegalArgumentException array is null.
*/
public static List<String> reverse(final String[] array) {
ArgUtils.notNull(array, "array");
if(array.length == 0) {
return new ArrayList<String>();
}
final List<String> list = Arrays.asList(array);
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(final String str1, final String str2) {
int len1 = str1.length();
int len2 = str2.length();
if(len1 != len2) {
// 逆順
return Integer.compare(len1, len2) * -1;
} else {
// 逆順
return str1.compareTo(str2) * 1;
}
}
});
return list;
}
/**
* 大文字・小文字を無視して指定した文字から始まるかチェックする。
* ・Commons-Langの「StringUtils.startsWithIgnoreCase」を参照。
* <pre>
* Utils.startsWithIgnoreCase(null, null) = true
* Utils.startsWithIgnoreCase(null, "abc") = false
* Utils.startsWithIgnoreCase("abcdef", null) = false
* Utils.startsWithIgnoreCase("abcdef", "abc") = true
* Utils.startsWithIgnoreCase("ABCDEF", "abc") = true
* </pre>
* @param str
* @param prefix
* @return
*/
public static boolean startsWithIgnoreCase(final String str, final String prefix) {
return startsWith(str, prefix, true);
}
/**
* 開始位置を指定し、
* @param str
* @param prefix
* @param offset 比較する文字の開始位置。文字数よりも大きい場合は、falseを返す。
* @return
*/
public static boolean startsWithIgnoreCase(final String str, final String prefix, final int offset) {
if (str == null || prefix == null) {
return (str == null && prefix == null);
}
if(str.length() < offset) {
return false;
}
final String subStr = str.substring(offset);
return startsWithIgnoreCase(subStr, prefix);
}
private static boolean startsWith(final String str, final String prefix, boolean ignoreCase) {
if (str == null || prefix == null) {
return (str == null && prefix == null);
}
if (prefix.length() > str.length()) {
return false;
}
return str.regionMatches(ignoreCase, 0, prefix, 0, prefix.length());
}
/**
* 大文字・小文字を無視して指定した文字を含むかチェックする。
* ・Commons-Langの「StringUtils.containsIgnoreCase」を参照。
* @param str
* @param searchStr
* @return
*/
public static boolean containsIgnoreCase(final String str, final String searchStr) {
if (str == null || searchStr == null) {
return false;
}
int len = searchStr.length();
int max = str.length() - len;
for (int i = 0; i <= max; i++) {
if (str.regionMatches(true, i, searchStr, 0, len)) {
return true;
}
}
return false;
}
/**
* 指定した文字の何れかを含むかどうか。
* @param str
* @param list
* @param ignoreCase 大文字・小文字を無視するかどうか。
* @return
*/
public static boolean containsAny(final String str, final String[] list, final boolean ignoreCase) {
if(str == null) {
return false;
}
if(list == null || list.length == 0) {
return false;
}
for(String item : list) {
if(ignoreCase) {
if(containsIgnoreCase(str, item)) {
return true;
}
} else {
if(str.indexOf(item) >= 0) {
return true;
}
}
}
return false;
}
/**
* 何れかの文字と等しいかどうか
* @param str
* @param searchChars
* @return
*/
public static boolean equalsAny(final String str, String[] searchChars) {
for(String search : searchChars) {
if(str.equals(search)) {
return true;
}
}
return false;
}
/**
* 大文字・小文字を無視して、何れかの文字と等しいか。
* <pre>
* Utils.equalsAnyIgnoreCase("abc", null) = false
* Utils.equalsAnyIgnoreCase("abc", new String[]{}) = false
* Utils.equalsAnyIgnoreCase(null, new String[]{"abc"}) = false
* Utils.equalsAnyIgnoreCase("", new String[]{""}) = true
* </pre>
*
* @param str
* @param list
* @return
*/
public static boolean equalsAnyIgnoreCase(final String str, final String[] list) {
if(str == null) {
return false;
}
if(list == null || list.length == 0) {
return false;
}
for(String item : list) {
if(str.equalsIgnoreCase(item)) {
return true;
}
}
return false;
}
/**
* 指定した桁分、ゼロサプライ(ゼロ埋め)する。
* <p>既に指定したサイズを超える桁数の場合は、何もしない。
* <p>nullや空文字の場合は、空文字を返す。
* @param str 対象の文字
* @param size 桁数
* @return ゼロサプライした文字列
*/
public static String supplyZero(final String str, final int size) {
if(str == null) {
return "";
}
final int length = str.length();
if(length > size) {
return str;
}
StringBuilder sb = new StringBuilder();
final int appendSize = size - length;
for(int i=0; i < appendSize; i++) {
sb.append("0");
}
sb.append(str);
return sb.toString();
}
}