JavaやKotlinで、文字列の上N桁や下N桁以外の文字をマスク処理したい場合がありますよね?
マスクする方法はいくつか考えられますが、なるべくスマートな方法で処理したいと思うのがプログラマの性だと思います。
今回の記事では、Apache Commons Langの StringUtils を使う方法を紹介します。
間違っても substring を使って処理してはいけません。
substring を使ってはいけない理由を知りたい方はこちらの記事をご覧下さい↓
-
substring を使わない方が良い3つの理由 [Java]
この記事では、Javaにおけるsubstringの闇を暴きます。 非常に罠が多いにも関わらず、初心者用の解説サイトでも出現頻度が高い有名なメソッドです。しかし、この難しいメソッドの使い方をわざわざ覚え ...
続きを見る
マスク処理は、以下のような結果になるのを想定しています。(アスタリスクでマスクする例)
下4桁以外をマスク
null -> null
"" -> ""
"4en" -> "4en"
"4eng" -> "4eng"
"4engineer.net" -> "*********.net"
"1234-5678-9012-3456" -> "***************3456"
今回の記事は、ちょっとだけ出来るエンジニアに見える小ネタです!
目次
サンプルコード
上N桁を残してマスクする
Java
public class MaskUtils {
public static String mask(String input, int size) {
return StringUtils.rightPad(StringUtils.left(input, size), StringUtils.length(input), '*');
}
}
Kotlin
fun mask(input: String?, size: Int): String? {
return StringUtils.rightPad(StringUtils.left(input, size), StringUtils.length(input), '*')
}
下N桁を残してマスクする
Java
public class MaskUtils {
public static String mask(String input, int size) {
return StringUtils.leftPad(StringUtils.right(input, size), StringUtils.length(input), '*');
}
}
Kotlin
fun mask(input: String?, size: Int): String? {
return StringUtils.leftPad(StringUtils.right(input, size), StringUtils.length(input), '*')
}
テスト結果(input -> output)
null -> null
->
4en -> 4en
4eng -> 4eng
4engineer.net -> *********.net
1234-5678-9012-3456 -> ***************3456
まとめ
最後に、この記事の内容をまとめます。
要点まとめ
- StringUtils クラスの left, right, leftPad, rigthPadを組み合わせてマスク処理を書くと綺麗なコードになる
マスクする処理は、結構色々な場面で使う機会がありそうですが、ネットを検索してもスマートなやり方が載っていなかったため、急遽記事を書きました。
StringUtils を使わなくても無理やりマスクする処理を書くことは出来ますが、よりシンプルな解法を探す意識を持つことがエンジニアとしての実力アップにも繋がると思います。
この記事が良かったと思ったら、ぜひ他のオススメ記事も読んでみて下さいね!