--- old/src/java.base/share/classes/java/text/DecimalFormat.java 2019-03-19 14:44:50.301229213 -0700 +++ new/src/java.base/share/classes/java/text/DecimalFormat.java 2019-03-19 14:44:49.502211776 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1916,7 +1916,7 @@ if (negativeExponent) { exponent = -exponent; fieldStart = result.length(); - result.append(symbols.getMinusSign()); + result.append(symbols.getMinusSignText()); delegate.formatted(Field.EXPONENT_SIGN, Field.EXPONENT_SIGN, fieldStart, result.length(), result); } @@ -2475,7 +2475,7 @@ boolean[] stat = new boolean[STATUS_LENGTH]; DigitList exponentDigits = new DigitList(); - if (subparse(text, pos, "", Character.toString(symbols.getMinusSign()), exponentDigits, true, stat) && + if (subparse(text, pos, "", symbols.getMinusSignText(), exponentDigits, true, stat) && exponentDigits.fitsIntoLong(stat[STATUS_POSITIVE], true)) { position = pos.index; // Advance past the exponent exponent = (int)exponentDigits.getLong(); @@ -2991,14 +2991,14 @@ } continue; case PATTERN_PERCENT: - c = symbols.getPercent(); - break; + buffer.append(symbols.getPercentText()); + continue; case PATTERN_PER_MILLE: - c = symbols.getPerMill(); - break; + buffer.append(symbols.getPerMillText()); + continue; case PATTERN_MINUS: - c = symbols.getMinusSign(); - break; + buffer.append(symbols.getMinusSignText()); + continue; } } buffer.append(c); @@ -3027,12 +3027,11 @@ for (int i=0; i(2); - } - FieldPosition fp = new FieldPosition(Field.CURRENCY); - fp.setBeginIndex(stringIndex); - fp.setEndIndex(stringIndex + string.length()); - positions.add(fp); - stringIndex += string.length(); - } - continue; + fieldID = Field.CURRENCY; + break; case PATTERN_PERCENT: - c = symbols.getPercent(); - field = -1; + string = symbols.getPercentText(); fieldID = Field.PERCENT; break; case PATTERN_PER_MILLE: - c = symbols.getPerMill(); - field = -1; + string = symbols.getPerMillText(); fieldID = Field.PERMILLE; break; case PATTERN_MINUS: - c = symbols.getMinusSign(); - field = -1; + string = symbols.getMinusSignText(); fieldID = Field.SIGN; break; } - if (fieldID != null) { + + if (fieldID != null && !string.isEmpty()) { if (positions == null) { positions = new ArrayList<>(2); } - FieldPosition fp = new FieldPosition(fieldID, field); + FieldPosition fp = new FieldPosition(fieldID); fp.setBeginIndex(stringIndex); - fp.setEndIndex(stringIndex + 1); + fp.setEndIndex(stringIndex + string.length()); positions.add(fp); + stringIndex += string.length(); + continue; } } stringIndex++; @@ -3129,14 +3119,14 @@ } else if (localized) { switch (c) { case PATTERN_PERCENT: - c = symbols.getPercent(); - break; + buffer.append(symbols.getPercentText()); + continue; case PATTERN_PER_MILLE: - c = symbols.getPerMill(); - break; + buffer.append(symbols.getPerMillText()); + continue; case PATTERN_MINUS: - c = symbols.getMinusSign(); - break; + buffer.append(symbols.getMinusSignText()); + continue; } } buffer.append(c); @@ -3155,11 +3145,11 @@ needQuote = affix.indexOf(symbols.getZeroDigit()) >= 0 || affix.indexOf(symbols.getGroupingSeparator()) >= 0 || affix.indexOf(symbols.getDecimalSeparator()) >= 0 - || affix.indexOf(symbols.getPercent()) >= 0 - || affix.indexOf(symbols.getPerMill()) >= 0 + || affix.indexOf(symbols.getPercentText()) >= 0 + || affix.indexOf(symbols.getPerMillText()) >= 0 || affix.indexOf(symbols.getDigit()) >= 0 || affix.indexOf(symbols.getPatternSeparator()) >= 0 - || affix.indexOf(symbols.getMinusSign()) >= 0 + || affix.indexOf(symbols.getMinusSignText()) >= 0 || affix.indexOf(CURRENCY_SIGN) >= 0; } else { needQuote = affix.indexOf(PATTERN_ZERO_DIGIT) >= 0 @@ -3235,7 +3225,7 @@ if ((negPrefixPattern != null && posPrefixPattern != null && negPrefixPattern.equals("'-" + posPrefixPattern)) || (negPrefixPattern == posPrefixPattern && // n == p == null - negativePrefix.equals(symbols.getMinusSign() + positivePrefix))) + negativePrefix.equals(symbols.getMinusSignText() + positivePrefix))) break; } result.append(localized ? symbols.getPatternSeparator() : @@ -3309,7 +3299,7 @@ char perMill = PATTERN_PER_MILLE; char digit = PATTERN_DIGIT; char separator = PATTERN_SEPARATOR; - String exponent = PATTERN_EXPONENT; + String exponent = PATTERN_EXPONENT; char minus = PATTERN_MINUS; if (localized) { zeroDigit = symbols.getZeroDigit();