Java

文字列をスマートにマスクする方法 [StringUtils] #Java #Kotlin

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 を使わなくても無理やりマスクする処理を書くことは出来ますが、よりシンプルな解法を探す意識を持つことがエンジニアとしての実力アップにも繋がると思います。

この記事が良かったと思ったら、ぜひ他のオススメ記事も読んでみて下さいね!

この記事は役に立ちましたか?

  • この記事を書いた人
アバター画像

ゴイチ

ソフトウェアエンジニア歴20年。 C/C++, C#, Java, Kotlinが得意で、組込系・スマホ・大規模なWebサービスなど幅広いプログラミング経験があります。 現在は某SNSの会社でWebエンジニアをしています。

-Java
-,