RFR: 8327640: Allow NumberFormat strict parsing [v7]
Naoto Sato
naoto at openjdk.org
Thu Apr 11 22:14:42 UTC 2024
On Thu, 11 Apr 2024 20:55:11 GMT, Justin Lu <jlu at openjdk.org> wrote:
>> Please review this PR and associated [CSR](https://bugs.openjdk.org/browse/JDK-8327703) which introduces strict parsing for NumberFormat.
>>
>> The concrete subclasses that will utilize this leniency value are `DecimalFormat` and `CompactNumberFormat`. Strict leniency allows for parsing to be used as an input validation technique for localized formatted numbers. The default leniency mode will remain lenient, and can only be set to strict through an intentional `setLenient(boolean)` method call. Leniency operates differently based off the values returned by `isGroupingUsed()`, `getGroupingSize()`, and `isParseIntegerOnly()`.
>>
>> Below is an example of the change, the CSR can be viewed for further detail.
>>
>>
>> DecimalFormat fmt = (DecimalFormat) NumberFormat.getNumberInstance(Locale.US);
>> fmt.parse("1,,,0,,,00,.23Zabced45"); // returns 1000.23
>> fmt.setLenient(false);
>> fmt.parse("1,,,0,,,00,.23Zabced45"); // Now throws a ParseException
>> fmt.setGroupingSize(2);
>> fmt.parse("12,34,567"); // throws ParseException
>> fmt.setParseIntegerOnly(true)
>> fmt.parse("12,34.56"); // throws ParseException
>> fmt.parse("12,34"); // successfully returns the Number 1234
>>
>>
>> The associated tests are all localized, and the data is converted properly during runtime.
>
> Justin Lu has updated the pull request incrementally with two additional commits since the last revision:
>
> - Reflect test suggestions
> - reflect impl suggestions
LGTM. Thanks for the changes.
-------------
Marked as reviewed by naoto (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/18339#pullrequestreview-1995566425
More information about the core-libs-dev
mailing list