On Tue, 11 Jun 2024 17:25:29 GMT, Justin Lu <j...@openjdk.org> wrote:

> Please review this PR and [CSR](https://bugs.openjdk.org/browse/JDK-8333920) 
> which corrects a bug where NumberFormat cannot successfully parse values in 
> integer only mode, when the format expects a suffix.
> 
> For example,
> 
> // a format that expects a currency suffix
> var fmt = NumberFormat.getCurrencyInstance(Locale.FRANCE);
> fmt.setParseIntegerOnly(true);
> failFmt.parse("5,00 €"); // throws ParseException when you would have 
> expected 5 returned
> 
> 
> When parsing in integer only mode, instead of breaking upon a decimal symbol 
> encounter, we should store the index but continue to fully parse so that we 
> can verify the entire string and increment our position to search for and 
> match the suffix. Upon a successful suffix match, we can then set 
> `ParsePosition.index` back to the stored decimal index.
> 
> It should be noted that CompactNumberFormat did previously have code that 
> would traverse the rest of the String, to allow matching of the suffix. The 
> difference is that NumberFormat returns the index upon decimal symbol 
> encounter, while CompactNumberFormat was implemented to return the index 
> reflected by the entire string traversal. Such differences cannot be 
> standardized due to behavioral compatibility concerns.
> 
> Thus while parsing in integer only, CNF sets index to the 
> `Position.fullPos()`, while DF sets index to the `Position.intPos()`.

This pull request has now been integrated.

Changeset: bffc8484
Author:    Justin Lu <j...@openjdk.org>
URL:       
https://git.openjdk.org/jdk/commit/bffc8484c32ad6c3205f7cebe4e262a2dc9de57e
Stats:     204 lines in 5 files changed: 102 ins; 34 del; 68 mod

8333755: NumberFormat integer only parsing breaks when format has suffix

Reviewed-by: naoto

-------------

PR: https://git.openjdk.org/jdk/pull/19664

Reply via email to