如何使用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+子字符串
byresult+=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." */