Problem:
I have a given string = "Hello @User Name and hello again @Full Name and this works"
Desired output: = ["@User Name, @Full Name"]
Code I have in Swift:
let commentString = "Hello @User Name and hello again @Full Name and this works"
let words = commentString.components(separatedBy: " ")
let mentionQuery = "@"
for word in words.filter({ $0.hasPrefix(mentionQuery) }) {
print(word) = prints out each single name word "@User" and "@Full"
}
Trying this:
if words.filter({ $0.hasPrefix(mentionQuery) }).isNotEmpty {
print(words) ["Hello", "@User", "Name".. etc.]
}
I'm stuck on how to get an array of strings with the full name = ["@User Name", "@Full Name"]
Would you know how?
CodePudding user response:
First of all, .filter
means that check each value in the array which condition you given and if true then take value - which not fit here.
For the problem, it can divide into two task: Separate string into substring by " " ( which you have done); and combine 2 substring which starts with prefix "@"
Code will be like this
let commentString = "Hello @User Name and hello again @Full Name"
let words = commentString.components(separatedBy: " ")
let mentionQuery = "@"
var result : [String] = []
var i = 0
while i < words.count {
if words[i].hasPrefix(mentionQuery) {
result.append(words[i] " " words[i 1])
i = 2
continue
}
i = 1
}
The result
print("result: ", result) // ["@User Name", "@Full Name"]
CodePudding user response:
You can also use filter
, like this below:
let str = "Hello @User Name and hello again @Full Name"
let res = str.components(separatedBy: " ").filter({$0.hasPrefix("@")})
print(res)
// ["@User", "@Full"]