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()
的方法中。我没有直接链接到行号,因为这是主分支,它们最终肯定会更改。
从本质上讲,如果你相对确定你只会处理国内数字,那么宽松的方法可能没问题。如果你要处理国际号码,请使用严格的方法。