【问题标题】:What is the correct way of checking the format of a String in Kotlin?在 Kotlin 中检查字符串格式的正确方法是什么?
【发布时间】:2022-11-14 20:11:59
【问题描述】:

我正在开发一个使用 Google MLkit 的 OCR 读取序列号的应用程序。 我发现有时读数并不完全准确,因此我创建了一个函数,只要格式不正确,它就会返回真/假。我对 Kotlin 有点陌生,我正在使用一种可取的方式这样做,因为我没有找到任何关于如何以更有效/正确的方式做到这一点的信息。

序列号始终具有相同的格式。 L=字母 D=数字 格式:LDDLLDDDDDDL

我相信有一种更好的方法可以做到这一点,而不涉及吉萨代码金字塔。

fun checkFormat(numSerie: String): Boolean {
    val numSerieArr = numSerie.toCharArray()
    var isCorrect = false
    if (numSerieArr[0].isLetter()) {
        if (numSerieArr[1].isDigit()) {
            if (numSerieArr[2].isDigit()) {
                if (numSerieArr[3].isLetter()) {
                    if (numSerieArr[4].isLetter()) {
                        if (numSerieArr[5].isDigit()) {
                            if (numSerieArr[6].isDigit()) {
                                if (numSerieArr[7].isDigit()) {
                                    if (numSerieArr[8].isDigit()) {
                                        if (numSerieArr[9].isDigit()) {
                                            if (numSerieArr[10].isDigit()) {
                                                    if (numSerieArr[11].isLetter()) {
                                                        isCorrect = true
                                                    }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

    }
    return isCorrect
}

提前感谢您对此的任何回复!

【问题讨论】:

  • 常用表达很可能是您要查找的内容。
  • @Vym谢谢,看起来就是这样,如果我设法做到这一点,我会用解决方案更新帖子。

标签: android string kotlin format


【解决方案1】:

你可以这样做,例如:

fun checkFormat(numSerie: String): Boolean {
    val format = "LDDLLDDDDDDDL"
    if (numSerie.length != format.length) return false
    numSerie.forEachIndexed { index, c ->
        when (format[index]) {
            'L' -> if (!c.isLetter()) return false
            'D' -> if (!c.isDigit()) return false
        }
    }
    return true
}

尽管我同意上述评论,即使用正则表达式可能是最好的解决方案,但我不知道如何最好地使用它来编写解决方案。

【讨论】:

  • 我要尝试正则表达式方法,因为它看起来是正确的方法,但这对我来说也很好
【解决方案2】:

我最终为此使用了正则表达式

    fun checkFormat(numSerie: String): Boolean {
    val regex = Regex(
        pattern = "([a-zA-Z]+([0-9]+[a-zA-Z]+)+)",
        options = setOf(RegexOption.IGNORE_CASE)
    )
    return regex.matches(numSerie)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-07
    • 2018-09-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多