public NumberFormat mergeFrom(NumberFormat other) { if (other.HasPattern()) { setPattern(other.getPattern()); } if (other.HasFormat()) { setFormat(other.getFormat()); } int leadingDigitsPatternSize = other.leadingDigitsPatternSize(); for (int i = 0; i < leadingDigitsPatternSize; i++) { addLeadingDigitsPattern(other.getLeadingDigitsPattern(i)); } if (other.HasNationalPrefixFormattingRule()) { setNationalPrefixFormattingRule(other.getNationalPrefixFormattingRule()); } if (other.HasDomesticCarrierCodeFormattingRule()) { setDomesticCarrierCodeFormattingRule(other.getDomesticCarrierCodeFormattingRule()); } setNationalPrefixOptionalWhenFormatting(other.isNationalPrefixOptionalWhenFormatting()); return(this); }
internal static bool isNationalPrefixPresentIfRequired(PhoneNumber number, PhoneNumberUtil util) { // First, check how we deduced the country code. If it was written in international format, then // the national prefix is not required. if (number.getCountryCodeSource() != PhoneNumber.CountryCodeSource.FROM_DEFAULT_COUNTRY) { return(true); } String phoneNumberRegion = util.getRegionCodeForCountryCode(number.getCountryCode()); PhoneMetadata metadata = util.getMetadataForRegion(phoneNumberRegion); if (metadata == null) { return(true); } // Check if a national prefix should be present when formatting this number. String nationalNumber = util.getNationalSignificantNumber(number); NumberFormat formatRule = util.chooseFormattingRegexForNumber(metadata.numberFormats(), nationalNumber); // To do this, we check that a national prefix formatting rule was present and that it wasn't // just the first-group symbol ($1) with punctuation. if ((formatRule != null) && formatRule.getNationalPrefixFormattingRule().Length > 0) { if (formatRule.isNationalPrefixOptionalWhenFormatting()) { // The national-prefix is optional in these cases, so we don't need to check if it was // present. return(true); } if (PhoneNumberUtil.formattingRuleHasFirstGroupOnly( formatRule.getNationalPrefixFormattingRule())) { // National Prefix not needed for this number. return(true); } // Normalize the remainder. String rawInputCopy = PhoneNumberUtil.normalizeDigitsOnly(number.getRawInput()); StringBuilder rawInput = new StringBuilder(rawInputCopy); // Check if we found a national prefix and/or carrier code at the start of the raw input, and // return the result. return(util.maybeStripNationalPrefixAndCarrierCode(rawInput, metadata, null)); } return(true); }