检查字符串的小写和大写

时间:2018-12-20 22:50:38

标签: kotlin

所以基本上我需要运行一个程序来检查第一个字符是否为大写。如果是这样,它会通过。然后,我需要检查其余字符是否为小写。我目前有此代码,但问题是,如果我在字符串上插入大写字母,然后以小写字母结尾,则可以继续执行,但不应该这样做。该程序需要询问用户另一个“名称”,如果它的第一个字符后有大写字母。 (很抱歉,如果不是很明确,我的英语不是那么好:/)

var lowercases = ' '
do {
    println("Insert a name")
    val name = readLine()!!.toString()
    val First = name[0]
    if (First.isUpperCase()) {
        for (caracter in 1 until name.length) {
            lowercases = name[caracter]
            if (lowercases.isLowerCase()) {


            }
        }
    } else{
        println("olha nao da")
    }
} while (First.isLowerCase() || lowercases.isUpperCase())

2 个答案:

答案 0 :(得分:3)

我将支票拆分为一个单独的功能。这不仅使逻辑更简单,而且允许您给它起描述性的名称。它非常适合作为String的扩展功能:

fun String.isTitleCase()
    = isNotEmpty() && this[0].isUpperCase() && drop(1).all{ it.isLowerCase() }

这意味着:String如果不为空,则为大写字母,第一个字符为大写字母,除第一个字符外的所有字符均为小写字母。 (如果您也想处理连字,则还要检查第一个字符isTitleCase()isUpperCase()。)

(当然,您可以将其编写为块样式的多行函数,可能带有循环和return s,但是当其他条件相同时,我更喜欢较短的版本!)

您的主代码则不必担心如何完成检查,并且变得更加简单:

while (true) {
    println("Enter a name:")
    val name = readLine()
    if (name != null && name.isTitleCase()) {
        // Do stuff
        break
    } else {
        println("olha nao da")
    }
}

(我已经用空检查替换了!!,这更加安全。我也将dowhile循环更改为while循环并使用break来避免重复检查。并且不需要调用toString(),因为readLine()已经给了您Stringnull。)

答案 1 :(得分:-1)

使用正则表达式更快,更干净:

val regex = """[A-Z][^A-Z]+""".toRegex()
var name
do{
    println("Insert a name")
    name = readLine()?.toString() :? "."
}while(!regex matches name)

另一种方式:

do {
    println("Insert a name")
    val name = readLine()!!.toString()
    var curChar = name[0]
    if(name.length > 1){
        if (curChar.isUpperCase()) {
           for (i in 1 until name.length) {
               curChar = name[i]
               if (curChar.isLowerCase()) {
                  // you send no code for this block
               }else{
                  break//as you wish if character is uppercase asks from user again
               }
           }
        } else{
           println("olha nao da")//your message as you send
        }
    }
} while (curChar.isUpperCase())