在进行字符串操作并将其转换为整数值时,我得到了意外的结果。请有人帮我解释为什么我得到这些结果。我将显示代码和打印结果,并解释我的期望。
var startIndex = string?.index((string?.startIndex)!, offsetBy: 10)
var endIndex = string?.index(of: ".")!
var field = String(describing: string?[startIndex!..<endIndex!])
print(field as Any)
打印:
Optional("10")
正是我所期望的。
print(field.lengthOfBytes(using: .utf8))
打印:
14
不是我所期望的。我期望值为2,因为“ 10”只有2个字符长。
print(Int(field) as Any)
打印:
nil
不是我所期望的。我期望值为10,因为将字符串“ 10”转换为整数将是10的整数值。
我刚刚在Playground中复制了此代码,它可以按预期工作。我不知道为什么。
//: Playground - noun: a place where people can play
import Foundation
var string = "Network\t\t\t10.0.0.0/8\nClass\t\t\t\tA\nRequired Hosts:\n2\n\nRequired hosts\t2\nAvailable hosts\t2\nSubnet\t\t\t\t10.0.0.0/30\nRange start\t\t10.0.0.1\nRange end\t\t\t10.0.0.2\nBroadcast\t\t\t10.0.0.3\nMask\t\t\t\t255.255.255.252\n\n"
print(string)
var startIndex = string.index(string.startIndex, offsetBy: 10)
var endIndex = string.index(of: ".")!
var field = String(describing: string[startIndex..<endIndex])
print(field as Any)
print(field.lengthOfBytes(using: .utf8))
print(Int(field) as Any)
打印:
Network 10.0.0.0/8
Class A
Required Hosts:
2
Required hosts 2
Available hosts 2
Subnet 10.0.0.0/30
Range start 10.0.0.1
Range end 10.0.0.2
Broadcast 10.0.0.3
Mask 255.255.255.252
10
2
Optional(10)
答案 0 :(得分:1)
尝试此希望对您有帮助:
var field = String("10")
var intValue = Int(field)
print(intValue!)
结果: 10
答案 1 :(得分:0)
var字段=字符串(描述:字符串?[startIndex!..
字段现在具有值Optional("10")
。
print(field.lengthOfBytes(使用.utf8))
打印14,因为那是字符串Optional("10")
的长度。毫不奇怪。
print(Int(field)as Any)
nil是因为字符串Optional("10")
无法转换为Int。
如果您从string
中删除了可选性,则一切正常:
if let str = string {
var startIndex = str.index((string?.startIndex)!, offsetBy: 10)
var endIndex = str.index(of: ".")!
var field = String(describing: str[startIndex..<endIndex])
print(field)
print(field.lengthOfBytes(using: .utf8))
print(Int(field))
}
答案 2 :(得分:0)
尽管代码有点麻烦,但如果第一位是字符串中的第11个字符,它应该可以工作
但是在这种情况下,float mil = atof(model);
更加可靠,因为偏移量可以是动态的,结果是Scanner
。
扫描仪扫描到第一个十进制数字,然后扫描Int
并将其分配给Int
变量。
result