2014-11-17 53 views
0

输入:解析字符串:before字符串的字符

[email protected] 
[email protected] 

输出:

chris 
steve 

我期待得到@字符前的子字符串。在Python中,我会使用类似于:myString = myString[:myString.find("@")],但我认为Swift的版本非常复杂,至少从我读过的内容来看。在这种情况下桥接Obj-C会更好吗,因为Swift的indexOf/find函数看起来像这样的混乱:Finding index of character in Swift String

这样的事情,即使它使用数组,似乎是simpliest路线:

contact = contact.componentsSeparatedByString("@")[0] 
+1

没有错,你提出的解决方案。 – CuriousRabbit

回答

0

在斯威夫特,巨蟒myString[:myString.find("@")]相当于:

myString[myString.startIndex ..< find(myString, "@")!] 

但是,这会导致运行错误,除非myString包含"@"

这样更安全。

if let found = find(myString, "@") { 
    myString = myString[myString.startIndex ..< found] 
} 

需要注意的是,find()搜索Character只,而不是子串。所以你不能:

find(myString, "@mydomain") 
0

这可能会帮助你

let arr = split(contact, { $0 == "@"}, maxSplit: Int.max, allowEmptySlices: false) 
println(arr[0]) 
0

相信你已经击中了要害。另一种选择是使用正则表达式来查找它。我还在学习迅速,但对事物的Objective-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

0

再有就是这个对象 - 片段,其中涉及更具体的问题给出的数据。 (请原谅,我还没有翻译成斯威夫特,在该技术仍然工作)

NSString* email = @"[email protected]"; 
NSURL* theURL = [NSURL URLWithString:[NSString stringWithFormat:@"mailto://%@", email]]; 
NSLog(@"%@ at %@", theURL.user, theURL.host); // yields "chuck at norris.net" 
0

这工作:

var str: String = "[email protected]" 
let a = str.componentsSeparatedByString("@") 
println("\(a[0])") 

输出为 “你好”