(Context context, String a, String b)
的 PhoneNumberUtils.compare
可让您比较两个电话号码是否相等。该文档说:
检查资源以确定是使用严格还是宽松的比较算法。
这是什么意思?如何检查资源以确定要使用的算法,以及这些算法有何不同?
答案 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方法。