3

スペースで区切られた数字をグループ化してクレジット カード番号をフォーマットしたい

たとえば、5112345112345114 は、5112 3451 1234 5114 のようにフォーマットする必要があります。

マスクを指定して、数字をレンダリングしたいと思います。たとえば、「#### #### #### ####」は 16 桁のクレジット カード番号です。Amex (15 桁) の場合、「#### ###### #####」のようになります。番号がまだ完全に利用できない場合 (カード所有者が入力したため)、左側からマスクにレンダリングする必要があります。

これを行うためのライブラリや Java の API はありますか? java.text.MessageFormat を見ましたが、文字列を分割する方法が見つかりませんでした。.net にはそのための API があるようです: String.Format("{0:0000 0000 0000 0000}", number)。

4

3 に答える 3

0

でフォーマットを使用する方法を次に示しますTextWatcher。スペース インデックスは自分で変更できます。

class CreditCardFormatWatcher : TextWatcherAdapter() {

    override fun afterTextChanged(s: Editable?) {
        if (s == null || s.isEmpty()) return

        s.forEachIndexed { index, c ->
            val spaceIndex = index == 4 || index == 9 || index == 14
            when {
                !spaceIndex && !c.isDigit()     -> s.delete(index, index + 1)
                spaceIndex && !c.isWhitespace() -> s.insert(index, " ")
            }
        }

        if (s.last().isWhitespace())
            s.delete(s.length - 1, s.length)
    }

}
于 2018-06-12T16:03:13.800 に答える