在我的專案中,我有 Localizable.string 檔案,它有超過 10,000 行 keyValue 格式。我需要將所有像“contentsList.sort.viewCount”這樣的dotCase格式的鍵轉換為lowerCamelCase。如何使用快速腳本進行轉換?謝謝你。
原樣
"contentsList.horizontal.more" = "totall";
成為
"contentsListHorizontalMore" = "totall";
uj5u.com熱心網友回復:
首先從您的字串中獲取所有行。CompactMap 你的行將它分成兩個由等號分隔的組件。獲取第一個組件,否則回傳 nil。獲取正則運算式的所有范圍(\w)\.(\w)。用大寫的第一組 第二組替換匹配范圍。這將洗掉句點。回傳一個元素(蛇形案例) 由分隔符等號連接的其他組件的集合。現在您已經擁有了所有行,您只需要通過換行符加入它們:
let string = """
"contentsList.horizontal.more" = "totall";
"whatever.vertical.less" = "summ";
"""
let pattern = #"(\w)\.(\w)"#
let lines = string.split(omittingEmptySubsequences: false,
whereSeparator: \.isNewline)
let result: [String] = lines.compactMap {
let comps = $0.components(separatedBy: " = ")
guard var first = comps.first else { return nil }
let regex = try! NSRegularExpression(pattern: pattern)
let matches = regex.matches(in: first, range: NSRange(first.startIndex..., in: first))
let allRanges: [[Range<String.Index>]] = matches.map { match in
(0..<match.numberOfRanges).compactMap { (index: Int) -> Range<String.Index>? in
Range(match.range(at: index), in: first)
}
}
for ranges in allRanges.reversed() {
first.replaceSubrange(ranges[0], with: first[ranges[1]] first[ranges[2]].uppercased())
}
return (CollectionOfOne(first) comps.dropFirst())
.joined(separator: " = ")
}
let finalString = result.joined(separator: "\n")
print(finalString)
這將列印
"contentsListHorizo??ntalMore" = "總計";
"whateverVerticalLess" = "summ";
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/473511.html
