我们有一个令牌化器,用于对文本文件进行标记。接下来的逻辑非常奇怪,但在我们的上下文中是必需的。
电子邮件,例如
xyz.zyx@gmail.com
将导致以下令牌:
xyz
.
zyx
@
gmail
我想知道如果允许我们仅使用这些令牌,我们如何将该字段识别为电子邮件。不允许正则表达式。我们只允许使用令牌及其周围的令牌来确定该字段是否为电子邮件字段
答案 0 :(得分:0)
好吧..试试这样的一些(坏)逻辑...
int i=0,j=0;
if(str.contains(".") && str.contains("@"))
{
if((i=str.indexOf(".") < (j=str.indexOf("@"))
{
if(i!=0 && i+1!=j) //ignore Strings like .@ , abc.@
return true;
}
}
return false
答案 1 :(得分:0)
将电子邮件地址逻辑拆分为3个部分:
像这样散步:
while token can be part of a user name
fetch next token;
if there no more -> no e-mail;
check if the next token is @
if not -> no e-mail
while there are tokens
while token can be part of a host name subpart (the "word" above)
fetch next token;
if there are no more -> might be a valid e-mail address
check if the next token is a dot
if not -> might be a valid e-mail address
set a flag that you found at least one dot
check if the next token can be part of a host name subpart
if not -> no valid e-mail address (or maybe you ignore a trailing dot and take what was found so far)
如果需要更多令牌,请添加进一步检查。您还可能必须对找到的令牌进行过帐以确保有效的电子邮件地址,并且您可能必须倒回令牌器(或缓存提取的令牌),以防您找不到有效的电子邮件地址并需要提供与其他一些认可过程相同的输入。
答案 2 :(得分:0)
检查令牌列表是否为电子邮件:
@
@
的索引!= 0 @
.
之后至少有1 @
个令牌,但不会在额外检查:
.
后续令牌@
之后的字符标记长度至少为2 @
之前所有字符标记的总长度至少为3