swift - 字符串复制中字母的范围位置
问题描述
我有一个像"abc1abc1"
.
我想要做的是加粗字符串的每个数字。我已经绘制了下面的代码。它通过分隔字符串的每个字符并将它们放入一个数组来工作。然后,在一个循环中,如果每个字符都包含一个Int()
,则该字符是粗体的。
但是,当有两个相同的 Int 时,问题就来了。在上面的字符串中,有 2 个字符 1
,因此代码只会将第一个字符加粗。
// Bold the numbers
let fullString = "abc1abc1"
let characters = Array(fullString)
let mutableString = NSMutableAttributedString(string: fullString)
for item in characters {
let string = String(item)
let decimalCharacters = CharacterSet.decimalDigits
let decimalRange = string.rangeOfCharacter(from: decimalCharacters)
if decimalRange != nil {
let str = NSString(string: fullString)
let range = str.range(of: string)
mutableString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIFont.systemFont(ofSize: 18, weight: .heavy), range: range)
}
}
instructionsLabel.attributedText = mutableString
// characters = ["a", "b", "c", "1", "a", "b", "c", "1"]
// range of ints returns {3, 1} and {3, 1}
// range of ints SHOULD return {3, 1} and {7, 1}
解决方案
尝试这个:
let fullString = "abc1abc1"
let range = NSRange(location: 0, length: (fullString as NSString).length)
let mutableString = NSMutableAttributedString(string: fullString)
let regex = try! NSRegularExpression(pattern: "[0-9]")
let matches = regex.matches(in: fullString, range: range)
for match in matches {
mutableString.addAttributes([.font: UIFont.systemFont(ofSize: 18, weight: .heavy)], range: match.range)
}
instructionsLabel.attributedText = mutableString
推荐阅读
- arrays - 多维ArrayPool使用
- c# - 如何将调试日志记录添加到 C# .NET Core 单元测试
- ckan - 收割时的ckan 2.8电子邮件验证
- ios - APNS如何检测设备在线/离线/切换
- python - int 对象在条件函数中不可调用
- php - 检查当前时间是否与时间间隔匹配
- excel - 如何将 MS Access 上受密码保护的数据库中的数据查找到 Excel 中?
- r - 使自定义函数在 dplyr mutate 中应用 rowise
- database - 在R中的for循环中增加数据框的列
- excel - 当另一个工作表中的单元格值更改时,运行自动重新过滤的 VBA 代码