繁体   English   中英

将 Swift 字符串转换为数组

[英]Convert Swift string to array

如何在 Swift 中将字符串"Hello"转换为数组["H","e","l","l","o"]

在Objective-C中,我使用了这个:

NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[myString length]];
for (int i=0; i < [myString length]; i++) {
    NSString *ichar  = [NSString stringWithFormat:@"%c", [myString characterAtIndex:i]];
    [characters addObject:ichar];
}

在 Swift 中更简单:

let string : String = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
println(characters)
// [H, e, l, l, o,  , 🐶, 🐮,  , 🇩🇪]

这使用了以下事实

  • 可以从SequenceType创建一个Array ,并且
  • String符合SequenceType协议,其序列生成器枚举字符。

并且由于 Swift 字符串完全支持 Unicode,这甚至适用于“基本多语言平面”之外的字符(例如🐶)和扩展的字素簇(例如🇩🇪,它实际上由两个Unicode 标量组成)。


更新:从 Swift 2 开始, String不再符合SequenceType ,但characters属性提供了一系列 Unicode 字符:

let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string.characters)
print(characters)

这也适用于Swift 3


更新:从 Swift 4 开始, String是(再次)其Character的集合:

let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "🐶", "🐮", " ", "🇩🇪"]

编辑(斯威夫特 4)

在 Swift 4 中,您不必使用characters来使用map() 只需在字符串上执行map()

let letters = "ABC".map { String($0) }
print(letters) // ["A", "B", "C"]
print(type(of: letters)) // Array<String>

或者,如果你更喜欢更短的: "ABC".map(String.init) (2 字节 😀)

编辑(Swift 2 和 Swift 3)

在 Swift 2 和 Swift 3 中,您可以对characters属性使用map()函数。

let letters = "ABC".characters.map { String($0) }
print(letters) // ["A", "B", "C"]

原版 (Swift 1.x)

接受的答案似乎不是最好的,因为序列转换的String不是String序列,而是Character

$ swift
Welcome to Swift!  Type :help for assistance.
  1> Array("ABC")
$R0: [Character] = 3 values {
  [0] = "A"
  [1] = "B"
  [2] = "C"
}

下面这对我有用:

let str = "ABC"
let arr = map(str) { s -> String in String(s) }

全局函数map()参考在这里: http : //swifter.natecook.com/func/map/

String 上也有这个有用的函数: components(separatedBy: String)

let string = "1;2;3"
let array = string.components(separatedBy: ";")
print(array) // returns ["1", "2", "3"]

可以很好地处理由“;”等字符分隔的字符串甚至 "\\n"

为 Swift 4 更新

这里有3种方法。

//array of Characters
let charArr1 = [Character](myString)

//array of String.element
let charArr2 = Array(myString)

for char in myString {
  //char is of type Character
}

在某些情况下,人们真正想要的是一种将字符串转换为每个长度为 1 个字符的小字符串数组的方法。 这是一个超级有效的方法:

//array of String
var strArr = myString.map { String($0)}

斯威夫特 3

这里有3种方法。

let charArr1 = [Character](myString.characters)
let charArr2 = Array(myString.characters)
for char in myString.characters {
  //char is of type Character
}

在某些情况下,人们真正想要的是一种将字符串转换为每个长度为 1 个字符的小字符串数组的方法。 这是一个超级有效的方法:

var strArr = myString.characters.map { String($0)}

或者您可以向 String 添加扩展名。

extension String {
   func letterize() -> [Character] {
     return Array(self.characters)
  }
}

然后你可以这样称呼它:

let charArr = "Cat".letterize()

一个简单的方法是map变量并将每个Character作为String返回:

let someText = "hello"

let array = someText.map({ String($0) }) // [String]

输出应该是["h", "e", "l", "l", "o"]

Martin R 的答案是最好的方法,正如他所说,因为 String 符合 SquenceType 协议,您还可以枚举一个字符串,在每次迭代中获取每个字符。

let characters = "Hello"
var charactersArray: [Character] = []

for (index, character) in enumerate(characters) {
    //do something with the character at index
    charactersArray.append(character)
}

println(charactersArray)
    let string = "hell0"
    let ar = Array(string.characters)
    print(ar)

对于字符串上的函数:components(separatedBy: String)

在 Swift 5.1 中

更改为:

string.split(separator: "/")

在 Swift 4 中,由于StringCharacter的集合,您需要使用map

let array1 = Array("hello") // Array<Character>
let array2 = Array("hello").map({ "\($0)" }) // Array<String>
let array3 = "hello".map(String.init) // Array<String>

您还可以创建扩展:

var strArray = "Hello, playground".Letterize()

extension String {
    func Letterize() -> [String] {
        return map(self) { String($0) }
    }
}
func letterize() -> [Character] {
    return Array(self.characters)
}

假设您有四个文本字段“otpOneTxt”、“otpTwoTxt”、“otpThreeTxt”、“otpFourTxt”和一个字符串“getOtp”

            let getup = "5642"
            let array = self.getOtp.map({ String($0) })
            
            otpOneTxt.text = array[0] //5
           
            otpTwoTxt.text = array[1] //6
           
            otpThreeTxt.text = array[2] //4
            
            otpFourTxt.text = array[3] //2

对于 Swift 5.3 版,它很简单:

let string = "Hello world"
let characters = Array(string)

print(characters)

// [“你好世界”]

let str = "cdcd"
let characterArr = str.reduce(into: [Character]()) { result, letter in
    result.append(letter)
}
print(characterArr)
//["c", "d", "c", "d"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM