RFR: JDK-8327640: Allow NumberFormat strict parsing
Justin Lu
jlu at openjdk.org
Mon Mar 18 06:29:40 UTC 2024
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.
-------------
Commit messages:
- init
Changes: https://git.openjdk.org/jdk/pull/18339/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=18339&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8327640
Stats: 1199 lines in 6 files changed: 1157 ins; 10 del; 32 mod
Patch: https://git.openjdk.org/jdk/pull/18339.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/18339/head:pull/18339
PR: https://git.openjdk.org/jdk/pull/18339
More information about the core-libs-dev
mailing list