PhoneNumberUtils.compare的“严格”或“宽松”比较意味着什么?

时间:2018-11-23 11:43:23

标签: android

带有签名(Context context, String a, String b)

PhoneNumberUtils.compare可让您比较两个电话号码是否相等。该文档说:

  

检查资源以确定是使用严格还是宽松的比较算法。

这是什么意思?如何检查资源以确定要使用的算法,以及这些算法有何不同?

1 个答案:

答案 0 :(得分:1)

  

它如何检查资源以确定要使用哪种算法

它调用getResources().getBoolean()参数上的Context来检索将由运营商设置的bool资源;即:

com.android.internal.R.bool.config_use_strict_phone_number_comparation

请注意,compare(String a, String b)方法自动使用松散方法。

  

算法有何不同?

两者都相当复杂且乏味,但是主要的区别在于,松散算法基本上是从右到左进行盲字符比较,几乎只考虑格式差异。通常,这对于国内电话来说绰绰有余。

但是,严格的算法考虑了国际号码的各种分钟规则及其可接受的差异。例如,如来源中所述,“ 090-1234-1234在日本不能等于90-1234-1234”。

这些算法(当前)在the source code for PhoneNumberUtils中名为compareLoosely()compareStrictly()的方法中。我没有直接链接到行号,因为这是主分支,并且它们肯定会最终更改。

从本质上讲,如果您相对确定只处理国内号码,则使用松散方法可能很好。如果您要处理国际号码,请使用strict方法。