*/
public String inputDigit(char nextChar) {
accruedInput.append(nextChar);
+ rememberPosition();
if (UNSUPPORTED_SYNTAX.matcher(Character.toString(nextChar)).matches()) {
ableToFormat = false;
}
positionRemembered = originalPosition;
currentOutput.setLength(0);
}
- rememberPosition();
return accruedInput.toString();
}
case 3:
case 4:
case 5:
- rememberPosition();
return accruedInput.toString();
case 6:
if (!extractIddAndValidCountryCode()) {
ableToFormat = false;
- rememberPosition();
return accruedInput.toString();
}
removeNationalPrefixFromNationalNumber();
return attemptToChooseFormattingPattern();
default:
if (nationalNumber.length() > 4) { // The formatting pattern is already chosen.
- return prefixBeforeNationalNumber + inputDigitHelper(nextChar);
+ String temp = inputDigitHelper(nextChar);
+ return ableToFormat
+ ? prefixBeforeNationalNumber + temp
+ : temp;
} else {
return attemptToChooseFormattingPattern();
}
positionRemembered = temp.length();
}
}
- return prefixBeforeNationalNumber +
- inputDigitHelper(nationalNumber.charAt(lengthOfNationalNumber - 1));
+ String temp = inputDigitHelper(nationalNumber.charAt(lengthOfNationalNumber - 1));
+ return ableToFormat
+ ? prefixBeforeNationalNumber + temp
+ : temp;
} else {
if (rememberPosition) {
positionRemembered = prefixBeforeNationalNumber.length();
} else { // More digits are entered than we could handle.
currentOutput.append(nextChar);
ableToFormat = false;
- if (rememberPosition) {
- positionRemembered = prefixBeforeNationalNumber.length() + currentOutput.length();
+ if (positionRemembered > 0) {
+ positionRemembered = originalPosition;
+ currentOutput.setLength(0);
}
- return currentOutput.toString();
+ return accruedInput.toString();
}
}
}
assertEquals(13, formatter.getRememberedPosition());
assertEquals("1 650 253 2222", formatter.inputDigit('2'));
assertEquals(13, formatter.getRememberedPosition());
+ assertEquals("165025322222", formatter.inputDigit('2'));
+ assertEquals(10, formatter.getRememberedPosition());
+ assertEquals("1650253222222", formatter.inputDigit('2'));
+ assertEquals(10, formatter.getRememberedPosition());
formatter.clear();
assertEquals("6", formatter.inputDigit('6'));