2015-04-13 3 views
1

У меня есть строка, и я хочу сократить первое слово и сделать это следующим образом; Есть ли способ для этого?swift - String: Сократите первое слово

var name = "John Doe" ---> «J. Doe»

Спасибо,

+0

Любые попытки, которые вы хотели бы поделиться? – zneak

+0

Я преобразовал строку в массив, а затем выбираю первое слово. Но я не знаю, как можно манипулировать буквами первых слов. ' пусть имя = "John Doe" пусть wordsArray = name.componentsSeparatedByString (»«) вар firstword = wordsArray [1] ' –

ответ

1

Вот простая функция для вас:

var name = "John Doe" 
func updateName(name: String) -> String { 

    let firstName: String = name.componentsSeparatedByString(" ").first!.uppercaseString as String 
    let secondName: String = name.componentsSeparatedByString(" ")[1].uppercaseString as String 
    let firstLetter = firstName.startIndex 
    let finalLetter = firstName[firstLetter] 

    return "\(finalLetter). \(secondName)" 
} 

updateName(name) // "J. doe" 
3

насчет попробовать что-то вроде этого, раскол в пространстве, а затем захватить первый символ первого массива. Это аккуратный трюк, поскольку строка представляет собой массив символов.

var name = "First Last" 
var fullNameArr = split(fullName) {$0 == " "} 
var shortName = "\(fullNameArr[0][0]). \(fullNameArr[1])" 
+0

Это довольно приличный подход на самом деле. – Akaino

+0

Хотя ваше решение отлично отвечает на вопрос, есть одно: что, если у человека есть первое и второе имя? – Peanut

3

Вы можете использовать компоненты, разделенные методом ByString.

extension String { 
    var shortName: String { 
     let components = componentsSeparatedByString(" ").map{$0.capitalizedString} 
     return String(components.first![startIndex]) + ". " + components.last! 
    } 
} 
println("John Doe".shortName) // "J. Doe" 
println("leonardo savio dabus".shortName) // "L. Dabus" 

или как функция:

func shortName(fullName: String) -> String { 
    let components = fullName.componentsSeparatedByString(" ").map{$0.capitalizedString} 
    return String(components.first![fullName.startIndex]) + ". " + components.last! 
} 

let short = shortName("John Doe") // "J. Doe" 
0

ручки средней, двойной средний, имя и т.д.

var name = "John Aby Doe" 
var fullNameArr = split(name) {$0 == " "} 
if let first = fullNameArr.first { 
    var shortName = "\(first[first.startIndex])." 
    for part in fullNameArr { 
     if part != first { 
      shortName += " \(part)" 
     } 
    } 
    println(shortName) 
} 
0

Это может быть альтернативный подход. Спасибо

var name = "John Doe" 
    var FirstPart : String = name.componentsSeparatedByString(" ")[0] as String 
     var secondPart : String = name.componentsSeparatedByString(" ")[1] as String 
     var firstLetter = FirstPart[FirstPart.startIndex] 
     var shortName = "\(firstLetter). \(secondPart)" 
print(shortName) // prints J. Doe 
1

Спасибо всем, с моим ограниченным опытом программирования Я совмещаю то, что вы все мне даете;

let name = authorname 
let wordsArray = name.componentsSeparatedByString(" ") 
var firstWord = wordsArray[0] 
var secondWord = wordsArray[1] 
var firstChar = Array(firstWord)[0] 
var shortName = "\(firstChar). \(secondWord)" 
self.title = shortName 
Смежные вопросы