* An offline mapper from phone numbers to time zones.
*/
public class PhoneNumberToTimeZonesMapper {
- private static PhoneNumberToTimeZonesMapper instance = null;
private static final String MAPPING_DATA_DIRECTORY =
"/com/google/i18n/phonenumbers/timezones/data/";
private static final String MAPPING_DATA_FILE_NAME = "map_data";
*/
private PhoneNumberMatch extractInnerMatch(String candidate, int offset) {
for (Pattern possibleInnerMatch : INNER_MATCHES) {
- int rangeStart = 0;
Matcher groupMatcher = possibleInnerMatch.matcher(candidate);
boolean isFirstMatch = true;
while (groupMatcher.find() && maxTries > 0) {
return true;
}
+ @Override
public boolean hasNext() {
if (state == State.NOT_READY) {
lastMatch = find(searchIndex);
return state == State.READY;
}
+ @Override
public PhoneNumberMatch next() {
// Check the state and find the next match as a side-effect if necessary.
if (!hasNext()) {
/**
* Always throws {@link UnsupportedOperationException} as removal is not supported.
*/
+ @Override
public void remove() {
throw new UnsupportedOperationException();
}
public class PhoneNumberUtil {
// @VisibleForTesting
static final MetadataLoader DEFAULT_METADATA_LOADER = new MetadataLoader() {
+ @Override
public InputStream loadMetadata(String metadataFileName) {
return PhoneNumberUtil.class.getResourceAsStream(metadataFileName);
}
}
return PhoneNumberMatcher.checkNumberGroupingIsValid(
number, candidate, util, new PhoneNumberMatcher.NumberGroupingChecker() {
+ @Override
public boolean checkGroups(PhoneNumberUtil util, PhoneNumber number,
StringBuilder normalizedCandidate,
String[] expectedNumberGroups) {
}
return PhoneNumberMatcher.checkNumberGroupingIsValid(
number, candidate, util, new PhoneNumberMatcher.NumberGroupingChecker() {
+ @Override
public boolean checkGroups(PhoneNumberUtil util, PhoneNumber number,
StringBuilder normalizedCandidate,
String[] expectedNumberGroups) {
final long maxTries) {
return new Iterable<PhoneNumberMatch>() {
+ @Override
public Iterator<PhoneNumberMatch> iterator() {
return new PhoneNumberMatcher(
PhoneNumberUtil.this, text, defaultRegion, leniency, maxTries);