首字母大写化每个句子

3

如何将字符串中每个句子的首字母大写?我应该使用 .capitalisedString 吗?


1
请参考我的回答:https://dev59.com/WHE95IYBdhLWcg3wKqok#24712107 - Ken Thomases
2
@MaxMacLeod:不是完全重复。参考的线程展示了如何将字符串的第一个字符大写,而不是将字符串中每个句子的第一个字符大写。 - Martin R
1
@MaxMacLeod 不是一个字符串,请注意这是有多个句子的字符串。 - Kirsteins
好的,我现在明白了,收到。 - Max MacLeod
2个回答

4

您可以使用NSStringEnumerationOptions.BySentences按句子枚举String。但是,它仅在第一个字符大写时才检测“句子”。

因此,这可能不完美,但您可以尝试以下方法:

import Foundation

let text:String = "lorem ipsum dolor elit, sed aliqfuas. imfs enim ad veniam, quis nostrud consequat? duis aute irure dolor in pariatur."

var result = ""
text.uppercaseString.enumerateSubstringsInRange(text.startIndex..<text.endIndex, options: .BySentences) { (_, range, _, _) in
//  ^^^^^^^^^^^^^^^^ enumerate all upper cased string

    var substring = text[range] // retrieve substring from original string

    let first = substring.removeAtIndex(substring.startIndex)
    result += String(first).uppercaseString + substring
}

// result -> "Lorem ipsum dolor elit, sed aliqfuas. Imfs enim ad veniam, quis nostrud consequat? Duis aute irure dolor in pariatur."

它将字符串中的第一个字母大写,但句子开头的其他字母仍然是小写的。 - Tom Coomer
(+1),但是:为什么要用var _?- 最后两行可以稍微简化一下,变成result += String(first).uppercaseString + substring - Martin R
这里实际上存在一个微妙的问题。你的方法应用于“toefl. abc.”会得到“Toefl. aBc.”。原因是当连字号“fl”转换为大写时,会变成两个字符:“FL” :) - Martin R

-1
public static void main(String[] args) {
    String a = "this is.a good boy";
    String[] dot = a.split("\\.");
    int i = 0;
    String output = "";
    while (i < dot.length) {
        dot[i] = String.valueOf(dot[i].charAt(0)).toUpperCase()
                + dot[i].substring(1);
        output = output + dot[i] + ".";
        i++;
    }
    System.out.println(output);
}

你看到这个问题是关于Swift编程语言的吗? - Martin R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接