确保每个字母都在一个字符串中 (Kotlin)

Making sure every Alphabet is in a string (Kotlin)

所以我有一个问题,我要检查一个字符串中是否包含字母表中的每个字母。我能够检查字符串中是否有字母表,但我不确定如何检查所述字符串中是否有每个字母表。这是代码

fun isPangram (pangram: Array<String>) : String {
    var panString : String
    var outcome = ""

    for (i in pangram.indices){
        panString = pangram[i]

        if (panString.matches(".^*[a-z].*".toRegex())){
            outcome = outcome.plus('1')
        }
        else {outcome = outcome.plus('0')}

    }
    return outcome

    }

欢迎任何想法谢谢。

嗨,这是使用正则表达式的方法

Kotlin 语法

fun isStrinfContainsAllAlphabeta( input: String) {
return input.lowercase()
  .replace("[^a-z]".toRegex(), "")
  .replace("(.)(?=.*\1)".toRegex(), "")
  .length == 26;
}

在java中:

public static boolean  isStrinfContainsAllAlphabeta(String input) {
  return input.toLowerCase()
 .replace("[^a-z]", "")
 .replace("(.)(?=.*\1)", "")
 .length() == 26;
}

函数只接受一个字符串。第一个“replaceAll”删除所有 non-alphabet 个字符,第二个“replaceAll”删除重复的字符,然后检查剩余的字符数。

我认为检查字母范围的所有成员是否都在每个字符串中比使用正则表达式更容易:

fun isPangram(pangram: Array<String>): String =
    pangram.joinToString("") { inputString ->
        when {
            ('a'..'z').all { it in inputString.lowercase() } -> "1"
            else -> "0"
        }
    }

只是为了借鉴 Tenfour04 的解决方案,如果您编写两个函数(一个用于 pangram 检查,一个用于处理数组)我觉得您可以使它更具可读性,因为它们实际上是两个独立的任务. (这部分是向您展示一些 Kotlin 技巧的借口!)

val String.isPangram get() = ('a'..'z').all { this.contains(it, ignoreCase = true) }

fun checkPangrams(strings: Array<String>) =
    strings.joinToString("") { if (it.isPangram) "1" else "0" }

你可以使用 extension function instead of an extension property(所以 it.isPangram()),或者只是一个带有参数的普通函数(isPangram(it)),但是你可以写出几乎像英语一样的东西,如果你愿意!