ICU-7913 Allow leading zeroes in strict parse in J per PMC agreement
X-SVN-Rev: 29772
This commit is contained in:
parent
68a2af94ca
commit
86004a8f8b
icu4j/main
classes/core/src/com/ibm/icu/text
tests/core/src/com/ibm/icu/dev/test/format
@ -2136,12 +2136,6 @@ public class DecimalFormat extends NumberFormat {
|
||||
int lastGroup = -1; // where did we last see a grouping separator?
|
||||
int gs2 = groupingSize2 == 0 ? groupingSize : groupingSize2;
|
||||
|
||||
// Strict parsing leading zeroes. If a leading zero would be forced by the
|
||||
// pattern, then don't fail strict parsing.
|
||||
boolean strictLeadingZero = false;
|
||||
int leadingZeroPos = 0;
|
||||
int leadingZeroCount = 0;
|
||||
|
||||
// equivalent grouping and decimal support
|
||||
boolean skipExtendedSeparatorParsing = ICUConfig.get(
|
||||
"com.ibm.icu.text.DecimalFormat.SkipExtendedSeparatorParsing", "false")
|
||||
@ -2202,14 +2196,6 @@ public class DecimalFormat extends NumberFormat {
|
||||
// Handle leading zeros
|
||||
if (digits.count == 0) {
|
||||
if (!sawDecimal) {
|
||||
if (strictParse) {
|
||||
// Allow leading zeros in exponents
|
||||
// Count leading zeros for checking later
|
||||
if (!strictLeadingZero)
|
||||
leadingZeroPos = position + 1;
|
||||
strictLeadingZero = true;
|
||||
++leadingZeroCount;
|
||||
}
|
||||
// Ignore leading zeros in integer part of number.
|
||||
continue;
|
||||
}
|
||||
@ -2385,13 +2371,6 @@ public class DecimalFormat extends NumberFormat {
|
||||
digits.decimalAt = digitCount; // Not digits.count!
|
||||
|
||||
// check for strict parse errors
|
||||
if (strictParse && strictLeadingZero) {
|
||||
if ((leadingZeroCount + digits.decimalAt) > this.getMinimumIntegerDigits()) {
|
||||
parsePosition.setIndex(oldStart);
|
||||
parsePosition.setErrorIndex(leadingZeroPos);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (strictParse && !sawDecimal) {
|
||||
if (lastGroup != -1 && position - lastGroup != groupingSize + 1) {
|
||||
strictFail = true;
|
||||
|
@ -390,9 +390,9 @@ public class IntlTestDecimalFormatAPI extends com.ibm.icu.dev.test.TestFmwk
|
||||
numstr = "005";
|
||||
try {
|
||||
Number n = df.parse(numstr);
|
||||
errln("ERROR: Expected round trip failure not encountered: numstr -> " + n);
|
||||
logln("INFO: Successful parse for " + numstr + " with strict parse enabled. Number is " + n);
|
||||
} catch (ParseException pe) {
|
||||
logln("INFO: Expected ParseExpection for " + numstr + " with strick parse enabled");
|
||||
errln("ERROR: Parse Exception encountered in strict mode: numstr -> " + numstr);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1965,12 +1965,12 @@ public class NumberFormatTest extends com.ibm.icu.dev.test.TestFmwk {
|
||||
"12345, ", // comma not followed by digit is not a group separator, but end of number
|
||||
"1,234, ", // if group separator is present, group sizes must be appropriate
|
||||
"1,234,567", // ...secondary too
|
||||
"0E", // an exponnent not followed by zero or digits is not an exponent
|
||||
"0E", // an exponent not followed by zero or digits is not an exponent
|
||||
"00", // leading zero before zero - used to be error - see ticket #7913
|
||||
"012", // leading zero before digit - used to be error - see ticket #7913
|
||||
"0,456", // leading zero before group separator - used to be error - see ticket #7913
|
||||
};
|
||||
String[] fail = {
|
||||
"00", // leading zero before zero
|
||||
"012", // leading zero before digit
|
||||
"0,456", // leading zero before group separator
|
||||
"1,2", // wrong number of digits after group separator
|
||||
",0", // leading group separator before zero
|
||||
",1", // leading group separator before digit
|
||||
@ -1992,9 +1992,9 @@ public class NumberFormatTest extends com.ibm.icu.dev.test.TestFmwk {
|
||||
"0E2", // single zero before exponent is ok
|
||||
"1234E2", // any number of digits before exponent is ok
|
||||
"1,234E", // an exponent string not followed by zero or digits is not an exponent
|
||||
"00E2", // leading zeroes now allowed in strict mode - see ticket #
|
||||
};
|
||||
String[] scientificFail = {
|
||||
"00E2", // double zeros fail
|
||||
"1,234E2", // group separators with exponent fail
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user