输入:
chris@mydomain.com
steve@mydomain.com
输出:
chris
steve
我希望在@
字符之前获取子字符串。在Python中,我会使用类似:myString = myString[:myString.find("@")]
的东西,但我认为Swift的版本非常复杂,至少从我读过的内容来看。在这种情况下桥接到Obj-C会更好吗,因为Swift的indexOf / find函数看起来像这个混乱:Finding index of character in Swift String?
这样的事情,即使它使用数组,似乎是最简单的路线:
contact = contact.componentsSeparatedByString("@")[0]
答案 0 :(得分:0)
这可能对您有所帮助
let arr = split(contact, { $0 == "@"}, maxSplit: Int.max, allowEmptySlices: false)
println(arr[0])
答案 1 :(得分:0)
我相信你已经击中了头部。另一种选择是使用正则表达式来查找它。我仍然学得很快,但客观的c版本如下:
-(NSString*) parseEmailPrefix(NSString*)email{
NSError *error = nil;
NSString *pattern = @"([A-Z0-9a-z._%+-]+)@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:pattern
options:0
error:&error];
NSTextCheckingResult *result = [expression firstMatchInString:email
options:0
range:NSMakeRange(0, email.length)];
return [string substringWithRange:[result rangeAtIndex:1]];
}
这在我看来更难以阅读,但它可以让您在使用时验证电子邮件。
正则表达式信用:Regex for email address
答案 2 :(得分:0)
然后有这个Obj-C片段,它更具体地解决了问题中给出的数据。 (原谅我没有翻译成Swift,仍在研究这项技能。)
NSString* email = @"chuck@norris.net";
NSURL* theURL = [NSURL URLWithString:[NSString stringWithFormat:@"mailto://%@", email]];
NSLog(@"%@ at %@", theURL.user, theURL.host); // yields "chuck at norris.net"
答案 3 :(得分:0)
在Swift中,Python myString[:myString.find("@")]
相当于:
myString[myString.startIndex ..< find(myString, "@")!]
但是这会导致运行时错误,除非myString
包含"@"
。
这更安全。
if let found = find(myString, "@") {
myString = myString[myString.startIndex ..< found]
}
请注意,find()
仅搜索Character
,而不搜索子字符串。所以你不能:
find(myString, "@mydomain")
答案 4 :(得分:0)
这有效:
var str: String = "Hello@World"
let a = str.componentsSeparatedByString("@")
println("\(a[0])")
输出为“你好”