"strict"或"loose"比较对PhoneNumberUtils.compare意味着什么?



PhoneNumberUtils.compare和签名(Context context, String a, String b)使您可以比较两个电话号码,看看它们是否相等。文件上写着:

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

这意味着什么?它是如何检查资源以确定使用哪种算法的,算法有何不同?

如何检查资源以确定使用的算法

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

com.android.internal.R.bool.config_use_strict_phone_number_comparation

需要注意的是,compare(String a, String b)方法自动使用loose方法。

算法有何不同?

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

然而,严格的算法考虑了国际号码的各种分钟规则及其可接受的差异;例如,如资料来源所述,"090-1234-1234在日本不得等于90-1234-1234"。

这些算法(目前(在PhoneNumberUtils的源代码中名为compareLoosely()compareStrictly()的方法中。我没有直接链接到行号,因为这是主分支,它们最终肯定会更改。

从本质上讲,如果你相对确定你只会处理国内数字,那么宽松的方法可能没问题。如果你要处理国际号码,请使用严格的方法。

相关内容

最新更新