Home > database >  Making sure every Alphabet is in a string (Kotlin)
Making sure every Alphabet is in a string (Kotlin)

Time:03-24

So I have a question where I am checking if a string has every letter of the alphabet in it. I was able to check if there is alphabet in the string, but I'm not sure how to check if there is EVERY alphabet in said string. Here's the code

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

    }

Any ideas are welcomed Thanks.

CodePudding user response:

I think it would be easier to check if all members of the alphabet range are in each string than to use Regex:

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

CodePudding user response:

Hi this is how you can make with regular expression

Kotlin Syntax

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

In java:

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

the function takes only one string. The first "replaceAll" removes all the non-alphabet characters, The second one removes the duplicated character, then you check how many characters remained.

CodePudding user response:

Just to bounce off Tenfour04's solution, if you write two functions (one for the pangram check, one for processing the array) I feel like you can make it a little more readable, since they're really two separate tasks. (This is partly an excuse to show you some Kotlin tricks!)

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" }

You could use an extension function instead of an extension property (so it.isPangram()), or just a plain function with a parameter (isPangram(it)), but you can write stuff that almost reads like English, if you want!

  • Related