Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Swift将每个句子中的第一个单词大写_Swift_Nsstring - Fatal编程技术网

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

如何使用Swift将每个句子中的第一个单词大写,swift,nsstring,Swift,Nsstring,通过考虑用户语言环境,我如何将段落中每个句子的第一个单词大写?我想要实现的是,无论句子中的大小写是什么,每个单词的第一个字母都是大写的,其余的都是小写的。我只能做一个句子,首先把所有的东西都转换成小写,然后得到第一个字母,再把它们加起来。我的问题不同于,因为我不想把每个词都大写。我只想把每个句子的第一个字大写大写字符串圈数 "this is first sentence. this is second sentence." 到 我想要的是 "This is first sentence. Th

通过考虑用户语言环境,我如何将段落中每个句子的第一个单词大写?我想要实现的是,无论句子中的大小写是什么,每个单词的第一个字母都是大写的,其余的都是小写的。我只能做一个句子,首先把所有的东西都转换成小写,然后得到第一个字母,再把它们加起来。我的问题不同于,因为我不想把每个词都大写。我只想把每个句子的第一个字大写<代码>大写字符串圈数

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

我想要的是

"This is first sentence. This is second sentence."
我的问题也与@rintaro的代码不适用于我下面的示例不同。它使原文中的大写字母保持不变。使用@rintaro的代码

以前

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

我想要实现的

"Somesentencewith utf text işğğ. Anothersentenceğüüğ." 
我下面的代码只能进行部分转换。

var description=“带UTF文本的某些句子。另一个句子ĜÜÜĞ”
description=description.lowercaseStringWithLocale(NSLocale.currentLocale())
let first=description.startIndex
让休息=前进(首先,1)尝试:


您可以使用正则表达式来实现这一点。我将此函数添加为字符串扩展,因此以后调用它将非常简单:

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()
扩展字符串{
func toUppercaseAtSentenceBoundary()->字符串{
变量字符串=self.lowercastering
变量容量=string.utf16Count
var mutable=NSMutableString(容量:容量)
可变。追加字符串(字符串)
var错误:N错误?
如果let regex=NSRegularExpression(
模式:“(?:^ b\\.[]*)(\\p{Ll})”,
选项:NSRegularExpressionOptions.AnchorsMatchLines,
错误:&错误
) {
如果let results=regex.matcheInstalling(
一串
选项:NSMatchingOptions.allZeros,
范围:NSMakeRange(0,容量)
)as?[NSTextCheckingResult]{
为了得到结果{
设numRanges=result.numberOfRanges
如果numRanges>=1{

对于1中的i..更新@rintaro的Swift 3代码:

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

var result = ""
str.uppercased().enumerateSubstrings(in: str.startIndex..<str.endIndex, options: .bySentences) { (sub, _, _, _)  in
    result += String(sub!.characters.prefix(1))
    result += String(sub!.characters.dropFirst(1)).lowercased()
}

print(result)
let str=“带UTF文本的SomeSentenceİŞĞ
var result=“”

str.uppercased().EnumerateSubstring(in:str.startIndex..我根据@Katy的代码在swift3中编写了这个扩展名

extension String {

func toUppercaseAtSentenceBoundary() -> String {

 var result = ""
    self.uppercased().enumerateSubstrings(in: self.startIndex..<self.endIndex, options: .bySentences) { (sub, _, _, _)  in
        result += String(sub!.characters.prefix(1))
        result += String(sub!.characters.dropFirst(1)).lowercased()
    }

    return result as String 
  }
}

我已经重新提出了这个问题。我承认我忽略了“其余部分将是小写的”部分(这在最初的示例中并不明显),并表示歉意。在我看来,对rintaro的代码进行微小的修改应该会得到您想要的结果:只需替换
result+=String(first).uppercaseString+子字符串
by
result+=String(第一个).uppercaseString+substring.lowercasesetring
。我对您的行为感到非常失望,先生。您多次给出/批准错误答案,并将问题锁定为重复问题。当然,它们现在已被删除,因此我无法证明任何这些事情。无论如何,下次我该怎么做,这样下次我就不会把铲子塞进喉咙了?谢谢你的帮助。由于这里有些人的行为,我感到非常紧张。谢谢你,但必须是“(?:^\\\b(\\.\.\!\\\?)[]*)(\\p{Ll})”来匹配任何标点符号,而不是句号。rintaro,你能为Swift 3更新你的答案吗?
let str = "someSentenceWith UTF text İŞğĞ. anotherSentenceğüÜğ"

var result = ""
str.uppercaseString.enumerateSubstringsInRange(indices(str), options: .BySentences) { (sub, _, _, _)  in
    result += sub[sub.startIndex ... sub.startIndex]
    result += sub[sub.startIndex.successor() ..< sub.endIndex].lowercaseString
}

println(result) // -> "Somesentencewith utf text i̇şğğ. Anothersentenceğüüğ"
let str = "someSentenceWith UTF text İŞğĞ. anotherSentenceğüÜğ"

var result = ""
str.uppercaseString.enumerateSubstringsInRange(str.characters.indices, options: .BySentences) { (sub, _, _, _)  in
    result += String(sub!.characters.prefix(1))
    result += String(sub!.characters.dropFirst(1)).lowercaseString
}

print(result)
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()
let str = "someSentenceWith UTF text İŞğĞ. anotherSentenceğüÜğ"

var result = ""
str.uppercased().enumerateSubstrings(in: str.startIndex..<str.endIndex, options: .bySentences) { (sub, _, _, _)  in
    result += String(sub!.characters.prefix(1))
    result += String(sub!.characters.dropFirst(1)).lowercased()
}

print(result)
extension String {

func toUppercaseAtSentenceBoundary() -> String {

 var result = ""
    self.uppercased().enumerateSubstrings(in: self.startIndex..<self.endIndex, options: .bySentences) { (sub, _, _, _)  in
        result += String(sub!.characters.prefix(1))
        result += String(sub!.characters.dropFirst(1)).lowercased()
    }

    return result as String 
  }
}
let string = "This is First sentence. This is second Sentence.".toUppercaseAtSentenceBoundary() 
print(string) /* Output: "This is first sentence. This is second sentence." */