Kotlin 检查列表中是否包含值(类似值)
我有一个数字列表,这些数字可以用不同的方式保存,有前缀或没有前缀,比如 “+39111222321417251234785,+393911114578052264245” 然后我输入了一个数字,它总是+39,或者任何其他国家代码 此时,我必须检查列表中是否存在该数字 我曾尝试在中使用Kotlin 检查列表中是否包含值(类似值),kotlin,Kotlin,我有一个数字列表,这些数字可以用不同的方式保存,有前缀或没有前缀,比如 “+39111222321417251234785,+393911114578052264245” 然后我输入了一个数字,它总是+39,或者任何其他国家代码 此时,我必须检查列表中是否存在该数字 我曾尝试在中使用,但如果列表中的数字是1112223214,而输入中的数字是+391112223214,则当我认为这是一个有效检查时,匹配将失败 以下是我尝试过的: val number = phoneNumber.removeTe
,但如果列表中的数字是1112223214,而输入中的数字是+391112223214,则当我认为这是一个有效检查时,匹配将失败
以下是我尝试过的:
val number = phoneNumber.removeTelPrefix().parseCountryCode() // value +391112223214 or any other in input
val contatti = contattiPrefs.split("#")
if (number in contatti) {
return response
}
那么,如何检查列表中的值是否与输入中的值几乎相同,但存在一些“差异”,如+39?您可以执行以下两种操作之一:
拆分并转换为字符串列表。在检查之前对列表进行规范化,即从任何具有前缀的数字中删除前缀+39,然后使用结果列表
拆分并将其转换为字符串列表。使用带有比较的结尾,而不是中的
contacts.filter{ it.endsWith("1112223214") }
您可以使用String.contains(Regex)
如果您的数字是输入的后缀,则将为true
例:
请记住,结尾处的$
表示匹配字符串结尾
使用regex,您可以添加额外的控件,如start With+,length of…如果您使用any
而不是contains
,那么如果您需要执行endsWith
无法处理的更复杂的操作,您可以传入一个处理比较逻辑的谓词
您可能需要考虑的另一个选项是创建一个单独的<代码> PosiNoNo./Copy>类型,并在其中放置比较逻辑-甚至可以重写它的<>代码>均衡器< /代码>方法。电话号码可能会变得有点古怪,特别是如果你让用户按他们喜欢的方式存储电话号码(前缀或无前缀、起始0可选、允许空格等),那么最好将所有逻辑封装在一个地方
此外,您还可以在构建它们时对它们进行验证,将输入重新格式化为标准表示形式(如剥离空格)等,这样您就可以得到一个简单的字符串无法提供的保证。可能对你正在做的事情来说太多了,但这是需要考虑的事情 endsWith
是否会返回值,即使该值与之匹配?输入+391112223214
,在列表中,即使输入值与该值匹配,samejust也已尝试并按预期工作
input.contains("${number}$".toRegex())
"+393911114578".contains("3911114578$".toRegex())