ApacheCommonsとGsonが必要なところがあります。
public class StringUtil {
/**
* パラメータを3桁カンマ区切り数字として返す。
* @param number 処理対象文字列
* @return フォーマット後文字列
*/
public static String formatComma(String number) {
if (!NumberUtils.isCreatable(number)) {
return number;
}
NumberFormat nfNum = NumberFormat.getNumberInstance();
return nfNum.format(Double.parseDouble(number));
}
/**
* パラメータの文字列を、パラメータの最大文字数で切って返す。
*
* nullの場合ブランクを返す。
* 文字数以内の場合文字列をそのまま返す。
* 指定文字数を超える場合は文字数で切った文字列を返す。
*
* @param target 処理対象文字列
* @param length 文字数
* @return 処理後文字列
*/
public static String split(String target, int length) {
String res = null;
if (StringUtils.isEmpty(target)) {
res = "";
} else if (target.length() > length) {
res = target.substring(0, length);
} else {
res = target;
}
return res;
}
/**
* 引数の文字列をSHA-256で暗号化して、16進数エンコードする。
* ※base64でもエンコード出来るが、その場合、文字数が64文字以下になる。
* @param pass
* @return
*/
public static String encode(String pass) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {// 発生しない
e.printStackTrace();
}
md.update(pass.getBytes());
byte[] digest = md.digest();
// 16 進数文字列として出力
StringBuilder sb = new StringBuilder();
for(byte b : digest) {
String hex = String.format("%02x", b); // 16 進数 2 桁として表示 (1byte は 00 ~ ff)
sb.append(hex);
}
String result = sb.toString();
if (result.length() > 64) {
result = result.substring(0, 64);
}
return result;
}
/**
* ランダムな32文字の文字列を生成する。
* CSRF攻撃対策用のトークンとして使用する。
* @return
*/
public static String getRandomToken() {
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[32];
random.nextBytes(bytes);
// 16 進数文字列として出力
StringBuilder sb = new StringBuilder();
for(byte b : bytes) {
String hex = String.format("%02x", b); // 16 進数 2 桁として表示 (1byte は 00 ~ ff)
sb.append(hex);
}
String result = sb.toString();
if (result.length() > 32) {
result = result.substring(0, 32);
}
return result;
}
/**
* ランダムな文字列を生成する。
* 文字列に記号を含めるため、base64でエンコードする。
* パスワードを生成するために使用する。
* @param num 文字数
* @return 生成したパスワード
*/
public static String getRandomPass(int num) {
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[32];
random.nextBytes(bytes);
String encoded = Base64.getEncoder().encodeToString(bytes);
String result = "";
if (num <= 32) {
result = encoded.substring(0, num);
} else {
result = encoded.substring(0, 32);
}
return result;
}
/**
* 数値を指定の桁で0埋めする
* @param num 処理対象数値
* @param digit 桁数
* @return 0埋め後文字列
*/
public static String padZero(int num, int digit) {
return String.format("%0" + digit +"d", num);
}
/**
* 指定の桁までスペース埋めする
* @param str 処理対象文字列
* @param digit 桁数
* @return スペース埋め後文字列
*/
public static String padSpace(String str, int digit) {
return String.format("%" + digit +"s", str);
}
/**
* 数字の頭の0を除去する
* @param str 処理対象文字列
* @return 0除去後文字列
*/
public static String ltrimZero(String str) {
return str.replaceFirst("^0+", "");
}
/**
* 文字列の頭のスペースを除去する
* @param str 処理対象文字列
* @return スペース除去後文字列
*/
public static String ltrim(String str) {
return str.replaceFirst("^ +", "");
}
/**
* 文字列の後ろのスペースを除去する
* @param str 処理対象文字列
* @return スペース除去後文字列
*/
public static String rtrim(String str) {
return str.replaceFirst(" +$", "");
}
/**
* JSON文字列からMapを生成
* @param json JSON文字列
* @return Map
*/
public static Map<String, String> createMapFromJson(String json) {
Gson gson = new Gson();
Type listType = new TypeToken<HashMap<String, String>>() { }. getType();
HashMap<String, String> map = gson.fromJson(json, listType);
return map;
}
/**
* MapからJSON文字列を生成
* @param map Map
* @return JSON文字列
*/
public static String createJsonFromMap(Map<String, String> map) {
Gson gson = new Gson();
return gson.toJson(map);
}
/**
* パラメータ1がnullの場合はパラメータ2を返す(SQLのNVLと同じ)
* @param val1 検査対象文字列
* @param val2 パラメータ1がnullの時に返す文字列
* @return 判定後パラメータ1OR2
*/
public static String nvl(String val1, String val2) {
if (val1 == null) {
return val2;
} else {
return val1;
}
}
}
0 件のコメント:
コメントを投稿