微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Swift将每个句子中的第一个单词大写

通过考虑用户区域设置,如何将段落中每个句子的第一个单词大写?我想要实现的是无论句子里面的情况如何,每个单词的第一个字母都是大写的,其余的都是小写的.首先将所有内容转换为小写,然后获得第一个字母并制作大写字母,最后将它们加在一起,我只能做一个句子.我的问题与 How to capitalize each word in a string using Swift iOS不同,因为我不想将每个单词大写.我只想把每个句子的第一个单词弄清楚. capitalizedString转

"this is first sentence. this is second sentence."

"This Is First Sentence. This Is Second Sentence."

我想要的是

"This is first sentence. This is second sentence."

我的问题也与Capitalise first letter of every sentence不同,因为@ rinTaro代码不适用于我的下面的例子.它保留原始文本中的大写字母完整.使用@ rinTaro代码;

之前

"someSentenceWith UTF text İŞğĞ. anotherSentenceğüÜğ"

"SomeSentenceWith UTF text İŞğĞ. AnotherSentenceğüÜğ."

我想要实现的目标,

"Somesentencewith utf text işğğ. Anothersentenceğüüğ."

我的代码只能进行部分转换.

var description = "someSentenceWith UTF text İŞğĞ. anotherSentenceğüÜğ"
description = description.lowercaseStringWithLocale(NSLocale.currentLocale())
let first = description.startIndex
let rest = advance(first,1)..<description.endindex
let capitalised = description[first...first].uppercaseStringWithLocale(NSLocale.currentLocale()) + description[rest]

如果你能仔细阅读我的问题,我将非常感谢,因为这是我第三次编辑这个问题.如果我不能清楚地问清楚,我真的很抱歉,因为我不是母语人士.所以尽管@rinTaro回答了类似的问题,但他的答案并没有解决我的问题. @ martin-r提出了一个Objective-C答案,它再次解决了我的问题.有另一个用户埃里克的东西,他们也提出了另一个答案,但事后删除.我只是无法理解为什么有几个人提出了不回答我的问题的不同答案.

解决方法

您可以使用正则表达式来实现此目的.我将此函数添加为String扩展,因此将来调用将是微不足道的:

extension String {

    func touppercaseAtSentenceBoundary() -> String {
        var string = self.lowercaseString

        var capacity = string.utf16Count
        var mutable = NSMutableString(capacity: capacity)
        mutable.appendString(string)

        var error: NSError?

        if let regex = NSRegularExpression(
            pattern: "(?:^|\\b\\.[ ]*)(\\p{Ll})",options: NSRegularExpressionoptions.AnchorsMatchLines,error: &error
            ) {

            if let results = regex.matchesInString(
                string,options: NSMatchingOptions.allZeros,range: NSMakeRange(0,capacity)
                ) as? [NSTextCheckingResult] {

                    for result in results {
                        let numRanges = result.numberOfRanges
                        if numRanges >= 1 {
                            for i in 1..<numRanges {
                                let range = result.rangeAtIndex(i)
                                let substring = mutable.substringWithRange(range)
                                mutable.replaceCharactersInRange(range,withString: substring.uppercaseString)
                            }
                        }
                    }
            }
        }

        return mutable
    }
}

var string = "someSentenceWith UTF text İŞğĞ. anotherSentenceğüÜğ.".touppercaseAtSentenceBoundary()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐