如何获取字符串中每个单词的第一个字符?

时间:2015-12-31 02:49:54

标签: ios swift

我想要这个:

var String1 = "Stack Over Flow"
var desiredOutPut = "SOF" // the first Character of each word in a single String (after space)

我知道如何从字符串中获取第一个字符,但不知道该怎么做这个问题。

10 个答案:

答案 0 :(得分:8)

为了保持更优雅,我将使用以下代码为swift 3.0 String类进行扩展。

extension String
{
    public func getAcronyms(separator: String = "") -> String
    {
        let acronyms = self.components(separatedBy: " ").map({ String($0.characters.first!) }).joined(separator: separator);
        return acronyms;
    }
}

后记你可以像这样使用它:

  let acronyms = "Hello world".getAcronyms();
  //will print: Hw

  let acronymsWithSeparator = "Hello world".getAcronyms(separator: ".");
  //will print: H.w

  let upperAcronymsWithSeparator = "Hello world".getAcronyms(separator: ".").uppercased();
  //will print: H.W

答案 1 :(得分:6)

您可以尝试以下代码:

let stringInput = "First Last"
let stringInputArr = stringInput.componentsSeparatedByString(" ")
var stringNeed = ""

for string in stringInputArr {
    stringNeed = stringNeed + String(string.first!)
}

print(stringNeed)

如果componentsSeparatedByString有问题,您可以尝试按字符空格分隔并继续在数组中删除所有字符串为空。

希望这有帮助!

答案 2 :(得分:3)

或者使用.reduce()

let str = "Stack Over Flow"
let desiredOutPut = str
    .components(separatedBy: " ")
    .reduce("") { $0.0 + ($0.1.characters.first.map(String.init(_:)) ?? "") }

可选地

let desiredOutPut = str
    .components(separatedBy: " ")
    .reduce("") { $0.0 + ($0.1.characters.first.map{ String($0) } ?? "") }

答案 3 :(得分:2)

SWIFT 3

为避免单词之间有多个空格(即John Smith)时出现崩溃,您可以使用以下内容:

extension String {
  func acronym() -> String {
    return self.components(separatedBy: .whitespaces).filter { !$0.isEmpty }.reduce("") { $0.0 + String($0.1.characters.first!) }
  }
}

如果您还要包含换行符,只需将.whitespaces替换为.whitespacesAndNewlines

答案 4 :(得分:1)

Note that if you're experiencing error: 

无法使用类型为'(String,(_)-> _)

的参数列表调用'reduce'
labelForContext.text = self.components(separatedBy: " ").reduce("") { first, next in 
     (first) + (next.first.map { String($0) } ?? "")
}

答案 5 :(得分:0)

您可以使用componentsSeparatedByString()方法获取字符串数组。使用" "作为分隔符。

由于您知道如何获取字符串的第一个字符串,现在您只需对数组中的每个字符串执行此操作。

答案 6 :(得分:0)

var String1 = "Stack Over Flow"
let arr = String1.componentsSeparatedByString(" ")
var desiredoutput = ""
for str in arr {
    if let char = str.characters.first {
        desiredoutput += String(char)
    }
}
desiredoutput

顺便说一下,我认为变量名的约定是第一个字符的小写字母,例如“string1”而不是“String1”

答案 7 :(得分:0)

以下是swift3中的更改

      let stringInput = "Stack Overflow"
      let stringInputArr = stringInput.components(separatedBy: " ")
      var stringNeed = ""

      for string in stringInputArr {
           stringNeed = stringNeed + String(string.characters.first!)
      }

      print(stringNeed)

答案 8 :(得分:0)

出于完整性考虑,这是一个功能非常强大的enumerateSubstrings(in:options:_:

的解决方案
let string = "Stack Over Flow"

var result = ""
string.enumerateSubstrings(in: string.startIndex..<string.endIndex, options: .byWords) { (substring, _, _, _) in
    if let substring = substring { result += substring.prefix(1) }
}
print(result)

答案 9 :(得分:0)

let inputString = "ABC PQR XYZ"
var stringNeed = ""

class something
{
        let splits = inputString.components(separatedBy: " ")
        for string in splits
        {
            stringNeed = stringNeed + String(string.first!)      
        }
        print(stringNeed)
}