出现错误:将空字符串返回到 bool [重复]
Posted
技术标签:
【中文标题】出现错误:将空字符串返回到 bool [重复]【英文标题】:Got error : return an empty string to bool [duplicate] 【发布时间】:2017-06-01 19:56:20 【问题描述】:我想测试输入字符串是否为“”。如果输入字符串是“”,则返回false。
var x = ""
func beginsWithVowel(x: String) -> Bool
if x.characters[x.startIndex] == "a" || x.characters[x.startIndex] == "A"
return true
else if x.characters[x.startIndex] == "e" || x.characters[x.startIndex] == "E"
return true
else if x.characters[x.startIndex] == "i" || x.characters[x.startIndex] == "I"
return true
else if x.characters[x.startIndex] == "o" || x.characters[x.startIndex] == "O"
return true
else if x.characters[x.startIndex] == "u" || x.characters[x.startIndex] == "U"
return true
else
return false
beginsWithVowel(x: x)
但我收到一个错误:致命错误:无法从空字符串中形成字符。 我该如何解决?谢谢你。 附言不能使用可选字符串,问题不是如何检查空字符串,而是为什么它不能在函数中返回布尔值。
【问题讨论】:
我会先检查 x 是否为空(在检查它是否为 A、E 等之前),因此不会对空字符串应用任何方法('.characters' 似乎将 x 转换为字符,所以它可能会在那里抛出异常)。 【参考方案1】:你可以使用guard来确保你的字符串有第一个字符,你可以使用一个带有元音的数组来检查它是否包含第一个字符。
func beginsWithVowel(x: String) -> Bool
guard let first = x.characters.first else return false
return ["a","e","i","o","u","A","E","I","O","U"].contains(first)
【讨论】:
您可以将其简化为.contains(first)
,因为 Swift 会推断字面量数组为 [Character]
。【参考方案2】:
先做空检查
func beginsWithVowel(x: String) -> Bool
if x.isEmpty return false
if x.characters[x.startIndex] == "a" ...
使用正则表达式的方法略有不同,它包括空检查:
func beginsWithVowel(x: String) -> Bool
let regex = try! NSRegularExpression(pattern: "^[aeiou]", options: .caseInsensitive)
return regex.firstMatch(in: x, range: NSMakeRange(0, x.utf16.count)) != nil
【讨论】:
为什么先做空支票可以修呢?有什么原则吗? 因为如果它通过了测试,就可以保证字符串中至少有一个字符。如果startIndex
处没有字符,则会发生错误。顺便说一句:用这种语法检索第一个字符 10 次是非常低效的。以上是关于出现错误:将空字符串返回到 bool [重复]的主要内容,如果未能解决你的问题,请参考以下文章
StreamReader.ReadToEnd() 返回空字符串 [重复]
geoip_country_by_name 返回空字符串,没有错误
Elasticsearch多重匹配在提供空字符串时不返回所有结果