Kotlin中如何不使用内置方法实现获取字符串未包含的元音?
实现方案
核心思路
完全通过双层循环实现对比逻辑,不需要借助minus或其他集合内置操作方法:
- 定义基础元音列表和待检测的输入字符串
- 逐个遍历每一个元音字母
- 针对当前遍历的元音,再遍历输入字符串的所有字符,判断该元音是否在字符串中出现
- 如果遍历完整个字符串都没找到对应元音,就把这个元音加入结果列表
- 最后输出结果列表即可
代码实现
fun main() { val line = "ankit" val vowels = listOf('a', 'e', 'i', 'o', 'u') val remainingVowels = mutableListOf<Char>() // 遍历所有元音逐个校验 for (vowel in vowels) { var isContained = false // 循环对比输入字符串的每个字符,判断当前元音是否存在 for (c in line) { if (c == vowel) { isContained = true // 匹配到后提前跳出内层循环,减少不必要的遍历 break } } // 元音未在字符串中出现就加入结果 if (!isContained) { remainingVowels.add(vowel) } } println(remainingVowels) }
上述代码针对输入ankit最终会输出[e, o, u],和你原有逻辑的运行结果完全一致。
如果你想沿用原有先收集字符串包含的元音、再对比求差的写法,也可以用如下循环逻辑实现:
fun main() { val line = "ankit" val containedVowel = mutableListOf<Char>() val vowels = listOf('a', 'e', 'i', 'o', 'u') for (c in line.toCharArray()) { when (c) { 'a', 'e', 'i', 'o', 'u' -> containedVowel.add(c) } } val remainingVowels = mutableListOf<Char>() // 循环对比元音列表和已收集的包含元音列表 for (vowel in vowels) { var exist = false for (contained in containedVowel) { if (vowel == contained) { exist = true break } } if (!exist) { remainingVowels.add(vowel) } } println(remainingVowels) }
内容的提问来源于stack exchange,提问作者Abhas Sharma
相关产品推荐
相关产品推荐

