maxLength property
The limit on the number of characters (i.e. Unicode scalar values) this formatter will allow.
The value must be null or greater than zero. If it is null, then no limit is enforced.
This formatter does not currently count Unicode grapheme clusters (i.e. characters visible to the user), it counts Unicode scalar values, which leaves out a number of useful possible characters (like many emoji and composed characters), so this will be inaccurate in the presence of those characters. If you expect to encounter these kinds of characters, be generous in the maxLength used.
For instance, the character "ö" can be represented as '\u{006F}\u{0308}', which is the letter "o" followed by a composed diaeresis "¨", or it can be represented as '\u{00F6}', which is the Unicode scalar value "LATIN SMALL LETTER O WITH DIAERESIS". In the first case, the text field will count two characters, and the second case will be counted as one character, even though the user can see no difference in the input.
Similarly, some emoji are represented by multiple scalar values. The Unicode "THUMBS UP SIGN + MEDIUM SKIN TONE MODIFIER", "👍🏽", should be counted as a single character, but because it is a combination of two Unicode scalar values, '\u{1F44D}\u{1F3FD}', it is counted as two characters.
Implementation
final int maxLength