【问题标题】:How do I insert a string into another string after a specific letter?如何在特定字母之后将字符串插入另一个字符串?
【发布时间】:2015-04-04 16:25:07
【问题描述】:

我在数据库中将高度存储为 62 或 511,而不是 6 英尺 2 或 5 英尺 11。

这就是我准备要保存的字符串的方式:

    let height = 6 ft 2
    let myNewString = height.stringByReplacingOccurrencesOfString(" ft ", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)
    println(myNewString) // 62

我现在想做的是在显示数据库中的数据时做相反的事情。

所以我想从数据库中取出返回的“62”并将这个字符串“ft”插入其中。我的目标是最终在应用程序上显示“6 ft 2”。

我该怎么做?

我想避免在我的数据库中存储两列专门用于高度的列。我只知道如何连接字符串,但这并不完全是连接字符串。我将它插入到现有的字符串中。

我希望有一种有效的方法来做到这一点。环顾四周,似乎找不到我的解决方案。

感谢您的宝贵时间。

更新:

阅读 cmets 后,我想知道在字符串中的第一个字符之后添加小数点是否会更好,例如4.2、4.10、5.4、5.11、6.2 等

let height = 6 ft 2
let myNewString = height.stringByReplacingOccurrencesOfString(" ft ", withString: ".", options: NSStringCompareOptions.LiteralSearch, range: nil)
println(myNewString) // 6.2

【问题讨论】:

  • 您的表述不明确。 111 可以是 11 ft 11 ft 11
  • 最小年龄为 4 英尺 0,最大年龄为 7 英尺 11 @MartinR
  • 哦!我明白你在说什么。我完全错过了。回到我的绘图板上。也许我可以在第一个字符后添加一个小数点
  • 这不是模棱两可的。鉴于您所说的高度范围,第一个数字始终是英尺,其余数字(如果有)是英寸。
  • 与其在格式上更聪明,不如以英寸为单位存储。如果这是目标,您甚至可以通过使用 1 字节的 int 而不是 3 字节的字符串来节省空间。

标签: ios cocoa-touch swift nsstring


【解决方案1】:

以英寸为单位存储高度可能会更好(例如,将 74 存储为 6'2")。

无论如何:

    let input = "62"
    let feet = (input as NSString).substringToIndex(1)
    let inches = (input as NSString).substringFromIndex(1)
    let output = "\(feet) ft \(inches)"

如果你不喜欢使用NSString,你可以这样避免:

    let input = "62";
    let feet = input.substringToIndex(input.startIndex.successor())
    let inches = input.substringFromIndex(input.startIndex.successor())
    let output = "\(feet) ft \(inches)"

【讨论】:

  • 我想存储为 4'0" 但我没有这样做的原因是因为我的印象是我无法将这种格式用于解析查询条件,例如查询高度大于.....并且小于。我认为这只适用于整数。但我现在正在解析并手动编辑了一些字段并单击了列标题,并且这些字段已按正确的顺序放置(最低高度到最高)所以猜测它也可以在代码中工作。所以我可以存储为例如 6'2" 并以这种方式显示。
  • 您确定5'10" 会排在5'2" 之后吗?
【解决方案2】:

Swift 的String 符合RangeReplaceableCollectionType,它有一个splice 方法——splice 允许你将一个集合插入另一个集合。由于字符串是集合,这意味着您可以编写:

var height = "62"
if !height.isEmpty {
    height.splice(" ft ", atIndex: height.startIndex.successor())
} // height is now "6 ft 2"

或者,如果你知道你只想要“ft”之前的第一个字符,你可以这样做:

let height = "62"
if let feet = first(height) {
    let inches = dropFirst(height)
    let heightWithFt = "\(feet) ft \(inches)"
}

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 2012-09-25
    • 2015-02-11
    • 2021-09-11
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多