2017-09-27 44 views
2

我的字符串,如:獲得的首字母從的前兩個單詞串

Apple recipe recapes 

Mango Tengaer 

Lemone T U 

Grapes limoenis Steyic genteur 

所以我嘗試是:

if let bakery = filtered?[indexPath.row]{ 
    let stringInput = bakery.fruitsname 
       let stringInputArr = stringInput.components(separatedBy: " ") 
       var stringNeed = "" 

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

    print(stringNeed) // have to print first word first letter, second word second letter 

} 

但對我崩潰在這條線時,我爲我的第三個做Lemone T U words.On線:

stringNeed = stringNeed + String(string.characters.first!) 

任何幫助!

感謝

Output i expect as per my above words 


AR 
MT 
LT 
GL 
+2

「我的字符串像:」這是一個字符串,或一串字符串? – Larme

回答

2

試試這個。它將字符串分隔成字符串數組並刪除nil。所以如果字符串有雙倍的空間,它會過濾它。確保字符串至少有2個字。

if let bakery = filtered?[indexPath.row]{ 
    let stringInput = bakery.fruitsname 
    if stringInput.components(separatedBy: " ").count >= 2 { 
     let stringNeed = (stringInput.components(separatedBy: " ").map({ $0.characters.first }).flatMap({$0}).reduce("", { String($0) + String($1) }) as NSString).substring(to: 2) 
    print(stringNeed) 
    } 
} 
+1

看起來更好的解決方案 –

0

檢查可選的第一個字母也許有添加到它額外的空間

if let bakery = filtered?[indexPath.row]{ 
let stringInput = bakery.fruitsname 
     let stringInputArr = stringInput.components(separatedBy: " ") 
     var stringNeed = "" 

       for string in stringInputArr { 

//Check the optional 
       if let first = string.characters.first{ 
        stringNeed = stringNeed + String(first) 

       } 
      } 

} 
1

只需要檢查數組數

var array = [ 
"Apple recipe recapes", 
"Mango Tengaer", 
"Lemone T U", 
"Grapes limoenis Steyic genteur"] 

for str in array { 
    let wordArray = str.split(separator: " ") 
    if wordArray.count >= 2 { 
     let firstTwoChar = String(wordArray[0].first!)+String(wordArray[1].first!) 
     print(firstTwoChar) 
    } 
} 

輸出:

Ar 
MT 
LT 
Gl 
+0

你編譯過代碼嗎?它在第三個對象中崩潰。 –

+0

輸出是我從我的操場控制檯拿出來的,即使有2個空間也沒有碰撞 – Tj3n

0

試試這個:(我已經添加前綴2,這樣它就只計算第2個元素,如果只有單一的元素,則不用擔心它會不會崩潰)

if let bakery = filtered?[indexPath.row]{ 
    let stringInput = bakery.fruitsname 
      let stringInputArr = stringInput.components(separatedBy: " ") 
      var stringNeed = "" 

      for string in stringInputArr.prefix(2) //returns only first two elements { 

      if let strFirst = string.characters.first{ 
        stringNeed += String(strFirst) 
       } 
     } 

} 
0

這裏是我的解決方案,事實上,你有在啓動一個字符串對象的數組。

let myStrings:[String] = ["Apple recipe recapes","Mango Tengaer", " Lemone T U", "Grapes limoenis", "Steyic genteur", "He"] 

var retStr = ""; 
for (_, str) in myStrings.enumerated() 
{ 
    let stringInOneLine = str.components(separatedBy: CharacterSet.whitespaces).filter({$0.count > 0}).map({String($0.first!).uppercased()}).prefix(2).joined() 

    //Separate all components by white spaces 
    let c1 = str.components(separatedBy: CharacterSet.whitespaces) 
    print("c1: \(c1)") 

    //Remove components that are empty: It happens in case there is double spaces for instance 
    let c2 = c1.filter({$0.count > 0}) 
    print("c2: \(c2)") 

    //Get only the first letter and in upper case 
    let c3 = c2.map({String($0.first!).uppercased()}) 
    print("c3: \(c3)") 

    //Keep only the first two elements (if there is more or less than 2, it's takend care of 
    let c4 = c3.prefix(2) 
    print("c4: \(c4)") 

    //Reform the String with the first letters 
    let string = c4.joined() 
    print("string: \(string)") 



    retStr.append(stringInOneLine) 
    retStr.append("\n") 
    print("stringInOneLine:\n\(stringInOneLine)") 
} 

print("retStr:\n\(retStr)") 

,其構造retStr如果需要,可以很容易地改變(如果你想例如String數組)的方式。 我通過解釋爲什麼每次打電話來分解stringInOnLine構造。 這取決於你的Swift專業水平和全球編程/算法技能,以決定你是喜歡所有鏈接在一條線上還是各種線條。 它有助於說明如何分解鏈式調用(調試,理解或創建它們)。

0

可能乍一看有點古怪,但它實際上爲你做的工作(我不說這是最有效的解決方案的話):

var input: [String] = ["apple recipe recapes", "Mango Tengaer", "Lemone T U", "Grapes limoenis Steyic genteur", "One", "A B"] 
var result = input.filter { $0.contains(" ") && $0.characters.count > 0 }.map { String($0.first!).uppercased() + $0.substring(with: $0.range(of: "(\\w{1})", options: .regularExpression, range: $0.startIndex..<$0.endIndex)!).uppercased().trimmingCharacters(in: CharacterSet(charactersIn: " ")) } 

和實際result是:

["AR", "MT", "LT", "GL", "AB"] 

注:它忽視了單個詞或空字符串,但你可以擴展它爲那些爲w我假設,很容易,如果這是一個要求,它不會處理只有空格的輸入字符串,就像你在測試中看到的那樣。

相關問題