Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 检查列表中是否包含值(类似值)_Kotlin - Fatal编程技术网

Kotlin 检查列表中是否包含值(类似值)

Kotlin 检查列表中是否包含值(类似值),kotlin,Kotlin,我有一个数字列表,这些数字可以用不同的方式保存,有前缀或没有前缀,比如 “+39111222321417251234785,+393911114578052264245” 然后我输入了一个数字,它总是+39,或者任何其他国家代码 此时,我必须检查列表中是否存在该数字 我曾尝试在中使用,但如果列表中的数字是1112223214,而输入中的数字是+391112223214,则当我认为这是一个有效检查时,匹配将失败 以下是我尝试过的: val number = phoneNumber.removeTe

我有一个数字列表,这些数字可以用不同的方式保存,有前缀或没有前缀,比如

“+39111222321417251234785,+393911114578052264245”

然后我输入了一个数字,它总是+39,或者任何其他国家代码

此时,我必须检查列表中是否存在该数字

我曾尝试在中使用
,但如果列表中的数字是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())